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映射函数:向对象添加新键和值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

每天一点点之javascript(ES6) - Map对象

使用函数中的变量删除对象的键和值

高效地将 JavaScript 键和值数组转换为对象

Javascript:在嵌套字典中添加键/值对;键和值是变量

将json对象值变成javascript中的键和值[关闭]

如何在不使用循环的情况下在 PHP 中向多维添加新的键和值......?