【问题标题】:Javascript map function :add new key and value to object [duplicate]Javascript映射函数:向对象添加新键和值[重复]
【发布时间】:2018-08-22 17:56:19
【问题描述】:

我有这样的 JSON 数组

var array= [{id:1,name:'foo'},{id:2,name:'bar'}]

我想为现有数组中的每个对象添加一个新键(例如:isApproved

预期输出:

var array= [{id:1,name:'foo',isApproved:true},{id:2,name:'bar',isApproved:true}] 

我用地图功能来实现这个

array.map(function(e,index){
     e.isApproved[index]= true
}

但这对我不起作用

【问题讨论】:

  • 你必须从回调中返回它。 map 返回一个新数组。
  • 设置值后添加return e即可。
  • 但是得到Cannot set property '0' of undefined
  • 尝试使用e.isApproved = true,而不是使用e.isApproved[index] = true
  • e.isApproved = true。删除[index]

标签: javascript arrays


【解决方案1】:

你真的很亲密。您不需要这里的索引。映射通过数组的每个元素,所以 'e' 将是数组中的每个对象。

var array= [{id:1,name:'foo'},{id:2,name:'bar'}];

array.map(function(e){
     e.isApproved = true;
});
          
console.log(array);

【讨论】:

  • 这很好用。不需要索引变量
  • Array.prototype.map() 期望函数返回值
【解决方案2】:

使用此代码,您不会改变数组中的对象

const arr = [{id:1,name:'foo'},{id:2,name:'bar'}];
const mapped = arr.map(element => Object.assign(element, {isApproved: true})

更多的新方法是使用扩展运算符:

const arr = [{id:1,name:'foo'},{id:2,name:'bar'}];
const mapped = arr.map(element => ({isApproved: true ,...element}))

片段

const arr = [{id:1,name:'foo'},{id:2,name:'bar'}];
    const mapped = arr.map(element => ({isApproved: true ,...element}))


console.log(mapped)

【讨论】:

  • 感谢点差操作员,完成了我当天的配额。
【解决方案3】:

试试这个,你不需要索引:

var array= [{id:1,name:'foo'},{id:2,name:'bar'}];

array.map(value => value.isApproved = true);
console.log(array)

【讨论】:

    【解决方案4】:

    使用地图中的实际项目“e”

    Map 还为您提供了更改每个元素并将它们返回到新数组中的工具。如果您不希望当前数组改变其状态,而是需要修改后的同一数组形式,这将很有用。

    检查此代码:

    var array= [{id:1,name:'foo'},{id:2,name:'bar'}];
    
    var modifiedArray = array.map(function(e,index){
        return Object.assign({isApproved:true},e);
    });
    
    console.log(array);
    console.log(modifiedArray);
    

    输出:

    //array
    [{id: 1, name: "foo"},
    {id: 2, name: "bar"}]
    
    //modifiedArray
    [{isApproved: true, id: 1, name: "foo"},
    {isApproved: true, id: 2, name: "bar"}]
    

    【讨论】:

      【解决方案5】:

      e[index] 没有意义,因为这个index 是为你正在迭代的array 设计的。

      直接设置属性为e

      array.map(function(e,index){
           e.isApproved = true; 
      }
      

      【讨论】:

        【解决方案6】:
        <script>
        
        var array= [{id:1,name:'foo'},{id:2,name:'bar'}]
        array.forEach(function(e,index){
             e.isApproved= true;
        })
        console.log(array);
        
        </script>
        

        您可以使用 forEach 代替 map。

        【讨论】:

        • 实际上,如果你想修改给定数组的每个元素,使用 map 总是更好
        猜你喜欢
        • 2023-02-22
        • 2023-03-06
        • 2022-06-15
        • 1970-01-01
        • 2020-03-11
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多