如何将颜色数组映射赋值给已有对象数组中的每个对象?
解决数组对象对应分配颜色的问题
嘿,这个问题其实不用搞复杂的嵌套遍历啦!你要的是两个数组一一对应分配值,直接利用索引匹配就搞定了,我给你两种常用的实现方式:
首先先明确你的原始数据:
let arr = { people:[{name: 'Zero'},{name: 'Jeans'},{name: 'Duct'}] }; let colors = { color: ['#fff', '#fa0', '#eee'] };
方法一:直接修改原对象(forEach遍历)
这种方式会直接给arr.people里的每个对象添加color属性,操作简单直接:
arr.people.forEach((person, index) => { // 取同索引的颜色值,转成大写后赋值给person的color属性 person.color = colors.color[index].toUpperCase(); });
方法二:生成新对象数组(map遍历)
如果你不想修改原对象,而是生成一个新的数组,就用map方法:
arr.people = arr.people.map((person, index) => { // 解构原person对象,添加color属性后返回新对象 return { ...person, color: colors.color[index].toUpperCase() }; });
为啥嵌套遍历不行?
你之前尝试的嵌套遍历,会把每个person都和所有颜色配对一遍,最后每个person的color只会被最后一个颜色覆盖,完全不是你要的一一对应效果。而上面两种方法都是通过索引位置匹配,保证第N个person对应第N个颜色,完美符合你的需求~
执行完上面任意一种代码后,arr就会变成你想要的目标结构啦!
内容的提问来源于stack exchange,提问作者Shawn Sheehan
相关产品推荐
相关产品推荐

