只有在检查文档时,我才希望从map函数返回对象。这是我的州结构。
{
type: ListOfTypes[Math.floor(Math.random() * ListOfTypes.length)],
name: ListOfNames[Math.floor(Math.random() * ListOfNames.length)],
id: nanoid(),
channels: [
{
id: nanoid(),
Name: ListOfChannels[Math.floor(Math.random() * ListOfChannels.length)],
Files: [
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },],
},
{
id: nanoid(),
Name: ListOfChannels[Math.floor(Math.random() * ListOfChannels.length)],
Files: [
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
],
},
{
id: nanoid(),
Name: ListOfChannels[Math.floor(Math.random() * ListOfChannels.length)],
Files: [
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
{ folder: "Folder", id: nanoid(), documents: [{ doc: "WordDoc1.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc2.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc3.doc", isChecked: false, id: nanoid() }, { doc: "WordDoc4.doc", isChecked: false, id: nanoid() }] },
],
}
]
}我试图通过状态数组进行映射,但是我使用它得到了一个带有非必要数组的对象。
const handleMoveAll = () => {
const CheckedDocuments = List.map( (connection: any) => (connection.id == connectionId) &&
connection.channels.map( (channel: any) => (channel.id == channelId) &&
channel.Files.map( (file: any) =>
file.documents.map( (doc: any) => doc.isChecked &&
doc
))
)
)
console.log(CheckedDocuments)
}是否有更好的方法循环遍历Files数组,检查所检查的文档并在单个数组中返回它们?
发布于 2021-12-03 20:34:38
感谢HagaiHarari和oakar。
const handleMoveAll = () => {
const CheckedDocuments = List.flatMap((connection: any) => (connection.id == connectionId) ?
connection.channels.flatMap((channel: any) => (channel.id == channelId) ?
channel.Files.flatMap( (file: any) =>
file.documents.filter( (doc: any) => { if(doc.isChecked) return doc }
))
: []
)
: []
)
console.log(CheckedDocuments)
}https://stackoverflow.com/questions/70220086
复制相似问题