将属性添加到对象数组

时间:2016-08-12 16:53:36

标签: javascript arrays object underscore.js

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

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

我想为这个Objects数组的每个元素添加一个名为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"

有人可以告诉我如何实现这一目标。

6 个答案:

答案 0 :(得分:77)

您可以使用forEach方法为数组中的每个元素执行一次提供的函数。在此提供的函数中,您可以将Active属性添加到元素。

Results.forEach(function(element) { element.Active = "false"; });

答案 1 :(得分:66)

或使用map

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

编辑反映@adrianolsk的评论不改变原文,而是为每个评论返回一个新对象。

Read the spec

答案 2 :(得分:1)

我也遇到了这个问题,在尝试解决这个问题时,我一直崩溃运行我的应用程序的chrome标签。看来the spread operator for objects是元凶。

在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);
});

答案 3 :(得分:1)

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

答案 4 :(得分:0)

它作为键值结构遍历对象。然后,它将向该对象内部的每个对象添加一个名为“ Active”的新属性和该属性的示例值(“ Active”)。此代码可应用于对象数组和对象对象。

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

答案 5 :(得分:0)

使用ES6,您可以轻松做到:

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