JavaScript 的 map 函数:向对象中添加新的键和值

13

我有一个像这样的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}] 
我使用了map函数来实现这个。
array.map(function(e,index){
     e.isApproved[index]= true
}

但是这对我没有起作用。


你必须从回调函数中返回它。而且map函数会返回一个新的数组。 - Jai
设置完值后,请添加return e以返回已设置的值。 - gurvinder372
但是出现了“无法设置未定义的属性'0'”错误。 - shellakkshellu
尝试使用 e.isApproved = true 而不是使用 e.isApproved[index] = true - Dhaval Chaudhary
e.isApproved = true. delete [index] - Derpanel
6个回答

21

你很接近了。这里不需要索引。map会遍历数组的每个元素,因此'e'将成为数组中的每个对象。

var array= [{id:1,name:'foo'},{id:2,name:'bar'}];

array.map(function(e){
     e.isApproved = true;
});
          
console.log(array);


Array.prototype.map() 函数期待从函数中返回一个值。 - DollarAkshay

10

使用这段代码,您不会改变数组中的对象

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)


谢谢关于扩展运算符的内容,今天的学习任务完成了。 - mushcraft

2
尝试这个,您不需要索引:

var array= [{id:1,name:'foo'},{id:2,name:'bar'}];

array.map(value => value.isApproved = true);
console.log(array)


2

在map中使用实际的项目'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"}]

0

e[index] 没有意义,因为这个 index 是用于你正在迭代的 array

直接将属性设置为 e

array.map(function(e,index){
     e.isApproved = true; 
}

0
<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。 - Kasia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接