Javascript映射函数:向对象添加新键和值[重复]
Posted
技术标签:
【中文标题】Javascript映射函数:向对象添加新键和值[重复]【英文标题】:Javascript map function :add new key and value to object [duplicate] 【发布时间】:2018-08-22 17:56:19 【问题描述】:我有这样的 JSON 数组
var array= [id:1,name:'foo',id:2,name:'bar']
我想为现有数组中的每个对象添加一个新键(例如:isApproved
)
预期输出:
var array= [id:1,name:'foo',isApproved:true,id:2,name:'bar',isApproved:true]
我用地图功能来实现这个
array.map(function(e,index)
e.isApproved[index]= true
但这对我不起作用
【问题讨论】:
你必须从回调中返回它。 map 返回一个新数组。 设置值后添加return e
即可。
但是得到Cannot set property '0' of undefined
尝试使用e.isApproved = true
,而不是使用e.isApproved[index] = true
。
e.isApproved = true
。删除[index]
【参考方案1】:
你真的很亲密。您不需要这里的索引。映射通过数组的每个元素,所以 'e' 将是数组中的每个对象。
var array= [id:1,name:'foo',id:2,name:'bar'];
array.map(function(e)
e.isApproved = true;
);
console.log(array);
【讨论】:
这很好用。不需要索引变量Array.prototype.map()
期望函数返回值【参考方案2】:
使用此代码,您不会改变数组中的对象
const arr = [id:1,name:'foo',id:2,name:'bar'];
const mapped = arr.map(element => Object.assign(element, isApproved: true)
更多的新方法是使用扩展运算符:
const arr = [id:1,name:'foo',id:2,name:'bar'];
const mapped = arr.map(element => (isApproved: true ,...element))
片段
const arr = [id:1,name:'foo',id:2,name:'bar'];
const mapped = arr.map(element => (isApproved: true ,...element))
console.log(mapped)
【讨论】:
感谢点差操作员,完成了我当天的配额。【参考方案3】:试试这个,你不需要索引:
var array= [id:1,name:'foo',id:2,name:'bar'];
array.map(value => value.isApproved = true);
console.log(array)
【讨论】:
【参考方案4】:使用地图中的实际项目“e”
Map 还为您提供了更改每个元素并将它们返回到新数组中的工具。如果您不希望当前数组改变其状态,而是需要修改后的同一数组形式,这将很有用。
检查此代码:
var array= [id:1,name:'foo',id:2,name:'bar'];
var modifiedArray = array.map(function(e,index)
return Object.assign(isApproved:true,e);
);
console.log(array);
console.log(modifiedArray);
输出:
//array
[id: 1, name: "foo",
id: 2, name: "bar"]
//modifiedArray
[isApproved: true, id: 1, name: "foo",
isApproved: true, id: 2, name: "bar"]
【讨论】:
【参考方案5】:e[index]
没有意义,因为这个index
是为你正在迭代的array
设计的。
直接设置属性为e
array.map(function(e,index)
e.isApproved = true;
【讨论】:
【参考方案6】:<script>
var array= [id:1,name:'foo',id:2,name:'bar']
array.forEach(function(e,index)
e.isApproved= true;
)
console.log(array);
</script>
您可以使用 forEach 代替 map。
【讨论】:
实际上,如果你想修改给定数组的每个元素,使用 map 总是更好以上是关于Javascript映射函数:向对象添加新键和值[重复]的主要内容,如果未能解决你的问题,请参考以下文章