将属性添加到对象数组中

224

我有一个如下所示的对象数组

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

我想要给这个对象数组的每个元素添加一个名为Active的属性。

最终结果应该如下所示。

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

有人可以告诉我如何实现这个吗。

8个回答

454

使用Array.prototype.map()

Results.map(obj => ({ ...obj, Active: 'false' }))

阅读文档 以获取更多信息。


5
只支持 ES6。 - Amaynut
6
ES5确切地说;但Babel可以轻松反编译它。 - sidonaldson
77
map 应该返回一个新数组而不是改变原始对象,这种情况下使用 forEach 更好,或者使用 map 并返回一个新对象:Results.map(obj=> ({...obj, Active : 'false'})) - adrianolsk
6
很好的解决方案 @adrianolsk,你应该将其作为一个单独的答案提交。 - Michael Hays
比被接受的解决方案好得多。 - Ch Usman

235
你可以使用forEach 方法来依次执行数组中每个元素的提供函数。在这个提供的函数中,你可以向该元素添加Active属性。
Results.forEach(function (element) {
  element.Active = "false";
});

15

使用ES6,您可以简单地执行以下操作:

 for(const element of Results) {
      element.Active = "false";
 }

8
我也遇到了这个问题,在尝试解决它的过程中,我的应用程序所运行的Chrome标签页一直崩溃。看起来对象的扩展运算符是罪魁祸首。
在adrianolsk的评论和sidonaldson上面的答案的帮助下,我使用了Object.assign()从babel的扩展运算符输出中,像这样:
this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

7

你可以使用map或foreach来实现这个功能。 由于有很多用foreach的方法,所以我将介绍如何使用map来实现。

  let new_array=array.map(function(ele){
       
       return {...ele,Active:'false'};
     })

如果您不想创建一个新的数组,而是希望对其进行修改,可以使用foreach。但是,如果您像我一样固执,希望使用map对其进行更改,可以按照以下方式操作:

array.map(function(ele){
       
       return ele.Active='false';
     });

5
  Object.defineProperty(Results, "Active", {value : 'true',
                       writable : true,
                       enumerable : true,
                       configurable : true});

使用Object.defineProperty定义动态属性。 - Ivan De Jesus Quezada Segura

5

该代码通过以键值结构的方式遍历对象。然后,它会向该对象内的每个单独对象添加一个名为“Active”的新属性和该属性的示例值('Active')。该代码可适用于对象数组和对象。

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

是的,它会将对象作为键值结构进行处理。然后,它将向该对象内的每个单独对象添加一个名为“Active”的新属性和一个示例值。此代码可应用于对象数组和对象内的对象。 - Arash MAS

0

for (let i = 0 ; i < 9999 ; i ++) { const blastMe = document.getElementById('pcBlaster'); blastMe.innerHtml = <span>再见 ${i} 个爆破器 </span> }

// 输出 = :) | ==> 你将测试并回复....,祝你好运


你确定这个答案和问题有关吗? - undefined
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好答案的更多信息。 - undefined

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