为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 如何将两个数组映射到一个对象

JavaScript 如何将两个数组映射到一个对象

小唯快跑啊 2021-06-29 21:02:45
我确实有一个包含一些字段的对象,其中三个是数组。我想一口气映射它们。让我展示一下我现在是如何做的:containerNames = this.state.fileContent.xContainers.map(xContainer => <Container containerName={xContainer} />);containerNames.push(this.state.fileContent.yContainers.map(yContainer => <Container containerName={yContainer} />));containerNames.push(this.state.fileContent.zContainers.map(zContainer => <Container containerName={zContainer} />));对我来说,它似乎可以以不同的方式制作。用一个 lambda?
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您要创建一个数组数组,因此请使用.map嵌套在另一个数组中:


const { xContainers, yContainers, zContainers } = this.state.fileContent;

containerNames = [xContainers, yContainers, zContainers].map(

  containers => containers.map(container => <Container containerName={container} />)

);


查看完整回答
反对 回复 2021-07-01
?
开满天机

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。


查看完整回答
反对 回复 2021-07-01
?
哈士奇WWW

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)


查看完整回答
反对 回复 2021-07-01
  • 3 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信