【问题标题】:How to rename properties of objects in array in javascript?如何在javascript中重命名数组中对象的属性?
【发布时间】:2017-12-11 12:18:10
【问题描述】:

我有这个 javascript 对象:

var arr = [{id:'124',name:'qqq'}, 
           {id:'589',name:'www'}, 
           {id:'45',name:'eee'},
           {id:'567',name:'rrr'}]

我需要将 arr1 中带有 name 的属性重命名为 title

var arr = [{id:'124',title:'qqq'}, 
           {id:'589',title:'www'}, 
           {id:'45',title:'eee'},
           {id:'567',title:'rrr'}]

用 Javascript 实现它的优雅方式是什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用delete 从对象中删除属性。 使用obj['newProperty']newProperty 分配给一个对象。

    var arr = [{id:'124',name:'qqq'}, 
               {id:'589',name:'www'}, 
               {id:'45',name:'eee'},
               {id:'567',name:'rrr'}];
               
    arr.forEach( function(data) {
      data['title'] = data['name'];
      delete data['name'];
    });
    
    console.log(arr);

    你也可以使用array#map

    const arr = [{ id: '124', name: 'qqq' }, { id: '589', name: 'www' }, { id: '45', name: 'eee' }, { id: '567', name: 'rrr' } ],
          result = arr.map(({name, ...rest}) => ({...rest, title: name}));
    console.log(result);

    【讨论】:

      【解决方案2】:

      以下是删除键和值并分配给新键的方法:

      var arr = [{id:'124',name:'qqq'}, 
                 {id:'589',name:'www'}, 
                 {id:'45',name:'eee'},
                 {id:'567',name:'rrr'}]
                 
      arr.forEach(function(o) {
          Object.defineProperty(o, 'title',
              Object.getOwnPropertyDescriptor(o, 'name'));
          delete o['name'];
      });           
      console.log(arr);

      【讨论】:

        【解决方案3】:

        无法更改属性的名称,但添加一个新的并删除旧的,我也从某个地方得到了代码,不记得确切的来源

        function changeKey(originalKey, newKey, arr)
        {
          var newArr = [];
          for(var i = 0; i < arr.length; i++)
          {
            var obj = arr[i];
            obj[newKey] = obj[originalKey];
            delete(obj[originalKey]);
            newArr.push(obj);
          }
          return newArr;
        }
        

        【讨论】:

          【解决方案4】:
          arr.map(e => { return { id: e.id, title: e.name }});
          

          【讨论】:

          • 我建议在您的回答中添加一些评论。没有它,例如,如果某个对象具有额外的属性(例如“日期”),您的解决方案将导致其在数组中的“删除”,这可能并不明显。
          • @MarceloGondim map 不会修改原始数组,您要么必须将 arr 重新分配给此结果,要么必须将其分配给新变量。
          【解决方案5】:

          使用map

          var arr = [{
              id: '124',
              name: 'qqq'
            },
            {
              id: '589',
              name: 'www'
            },
            {
              id: '45',
              name: 'eee'
            },
            {
              id: '567',
              name: 'rrr'
            }
          ]
          
          arr = arr.map((e) => {
            return {
              id: e.id,
              title: e.name
            }
          });
          
          console.log(arr);

          【讨论】:

          • 我可以在每个浏览器中使用map方法吗?
          • @Michael 你关注我的链接了吗?
          • @Michael 是的... ie9+
          猜你喜欢
          • 2020-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-30
          • 2021-01-22
          • 1970-01-01
          • 2011-11-10
          • 2014-04-15
          相关资源
          最近更新 更多