将属性添加到对象数组


110

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

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"

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


6
遍历数组。在循环时向每个数组元素添加属性。您不知道该怎么做?
JJJ

Answers:


157

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

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

223

或使用 map

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

通过@adrianolsk进行编辑以反映评论,以不更改原始评论,而是为每个评论返回一个新对象。

阅读规格


4
仅在ES6中受支持
Amaynut

5
ES5是精确的;)–但是babel会很乐意反编译
sidonaldson

51
map应该返回一个新数组而不改变对象,在这种情况下,forEach会更好,或者使用map并返回一个新对象Results.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk

4
很棒的解决方案@adrianolsk,您应该将其作为单独的答案提交。
Michael Hays


1

我也遇到了这个问题,在尝试解决这个问题时,我一直使运行我的应用程序的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);
});

0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.