3 回答

TA贡献1777条经验 获得超10个赞
您要创建一个数组数组,因此请使用.map嵌套在另一个数组中:
const { xContainers, yContainers, zContainers } = this.state.fileContent;
containerNames = [xContainers, yContainers, zContainers].map(
containers => containers.map(container => <Container containerName={container} />)
);

TA贡献1786条经验 获得超13个赞
OP 中的代码将类似于[1, 2, 3, [4, 5, 6], [7, 8, 9]],我希望这不是您想要的。如果你想[1, 2, 3, 4, 5, 6, 7, 8, 9],使用这个:
const containerNames = ["xContainers", "yContainers", "zContainers"].
flatMap(field => this.state.fileContent[field].map(...));
如果需要[[1, 2, 3], [4, 5, 6], [7, 8, 9]],请将其更改flatMap为map。

TA贡献1799条经验 获得超6个赞
在mapToContainer函数中将c参数传递给您<Container containerName={c} />
const allow = ['xContainers', 'yContainers', 'zContainers']
const fileContent = {
xContainers: [{name: '1'}, {name: '2'}, {name: '3'}],
yContainers: [{name: '1'}, {name: '2'}, {name: '3'}],
zContainers: [{name: '1'}, {name: '2'}, {name: '3'}],
foo: {}
}
const mapToContainer = containers => containers.map(c => c.name)
const containerNames =
Object.keys(fileContent)
.filter(k => allow.indexOf(k) !== -1)
.reduce((prev, curr) => [...prev, ...mapToContainer(fileContent[curr])], [])
console.log(containerNames)
添加回答
举报