【问题标题】:Add property to an array of objects将属性添加到对象数组
【发布时间】:2021-03-22 02:04:27
【问题描述】:

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

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"

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

【问题讨论】:

    标签: javascript arrays object underscore.js


    【解决方案1】:

    或使用map

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

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

    Read the spec

    【讨论】:

    • 仅在 ES6 中支持
    • 准确地说是 ES5 ;) - 但 babel 会很乐意反编译它
    • map 应该返回一个不改变对象的新数组,在这种情况下 forEach 会更好,或者使用 map 并返回一个新对象Results.map(obj=> ({ ...obj, Active : 'false' }))
    • 很好的解决方案@adrianolsk,您应该将其作为单独的答案提交。
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

    使用 ES6,您可以简单地做到:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
          Object.defineProperty(Results, "Active", {value : 'true',
                               writable : true,
                               enumerable : true,
                               configurable : true});
        

        【讨论】:

        • 使用 Object.defineProperty 定义动态属性。
        【解决方案6】:

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

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

        【讨论】:

        • 是的,当然,它通过对象作为键值结构。然后它将添加一个名为“Active”的新属性和一个样本值到该对象内的每个对象。此代码可应用于对象数组和对象对象。
        【解决方案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';
             });
        

        【讨论】:

          猜你喜欢
          • 2020-08-09
          • 1970-01-01
          • 2019-12-27
          • 2017-06-11
          • 2015-03-06
          • 2019-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多