将属性添加到对象数组

Pat*_*ick 54 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'
Run Code Online (Sandbox Code Playgroud)

我想为这个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"
Run Code Online (Sandbox Code Playgroud)

有人可以让我知道如何实现这一目标.

sid*_*son 108

或使用 map

Results.map(obj=> ({ ...obj, Active: 'false' }))
Run Code Online (Sandbox Code Playgroud)

阅读规范

  • map应该返回一个新的数组而不是改变对象,在这种情况下forEach会更好,或者使用map并返回一个新对象`Results.map(obj =>({... obj,Active:'false'})) ` (32认同)
  • 确切地说ES5;) - 但是巴贝尔会愉快地反编译它 (5认同)
  • 仅在ES6中受支持 (3认同)
  • 伟大的解决方案@adrianolsk,您应该将其作为单独的答案提交. (3认同)

Tho*_*lle 93

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

Results.forEach(function (element) {
  element.Active = "false";
});
Run Code Online (Sandbox Code Playgroud)

  • 更新您的浏览器或节点版本。 (3认同)

Joe*_*mer 8

我也遇到了这个问题,在尝试解决它时,我不断地崩溃运行我的应用程序的 chrome 选项卡。看起来对象的扩展运算符是罪魁祸首。

\n\n

在 adrianolsk\xe2\x80\x99s 评论和 sidonaldson\'s 上面的回答的帮助下,我使用了Object.assign() babel 的扩展运算符的输出,如下所示:

\n\n
this.options.map(option => {\n  // New properties to be added\n  const newPropsObj = {\n    newkey1:value1,\n    newkey2:value2\n  };\n\n  // Assign new properties and return\n  return Object.assign(option, newPropsObj);\n});\n
Run Code Online (Sandbox Code Playgroud)\n


小智 7

您可以使用 map 或 foreach 来做到这一点。foreach 有很多答案,所以我将讲述如何使用 map 来做到这一点。

  let new_array=array.map(function(ele){
       
       return {...ele,Active:'false'};
     })
Run Code Online (Sandbox Code Playgroud)

如果你不想有一个新的数组而是改变它,你可以使用 foreach。但是如果你想用 map 改变它,因为你像我一样固执,你可以通过以下方式做到这一点:

array.map(function(ele){
       
       return ele.Active='false';
     });
Run Code Online (Sandbox Code Playgroud)


小智 5

  Object.defineProperty(Results, "Active", {value : 'true',
                       writable : true,
                       enumerable : true,
                       configurable : true});
Run Code Online (Sandbox Code Playgroud)


Ara*_*MAS 5

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

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


小智 5

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

 for(const element of Results) {
      element.Active = "false";
 }
Run Code Online (Sandbox Code Playgroud)