从对象中提取部件并创建新的缩减版本

时间:2016-04-01 04:08:33

标签: underscore.js

我有一个JavaScript对象,我需要提取部分然后创建一个新的对象数组。需要注意的主要事项是新对象中的键名称不同(适用于Google跟踪代码管理器,并且已预定义了键名称)。

我想使用underscore.js,因为它已经在这个项目中被大量使用,但如果一个vanilla JS解决方案更简单,它就不是必需的。

这是现有对象的简化版

{
   'object_handle': 'handle',
   'something_else': 'ladela',
   'some_other_thing': 'other thing',
   'data':{
      'object_id': 120,
      'buildings':[
         {
            'item_id':120,
            'title':'Some title',
            'not_needed': 'Don't need this',
            'locations':[
               {
                  'location_id':4444
               }
            ]
         }, 
         {
            'item_id':121,
            'title':'Some other title',
            'not_needed': 'Don't need this',
            'locations':[
               {
                  'location_id':5555
               }
            ]
         },
         {
            'item_id':122,
            'title':'Some different title',
            'not_needed': 'Don't need this',
            'locations':[
               {
                  'location_id':6666
               }
            ]
         }
      ]
   }
}

我想提取部件(来自data.buildings)并创建这个新的对象数组

[{
    'name': 'Some title',
    'id': '120',
    'location': '4444'
},
{
    'name': 'Some other title',
    'id': '121',
    'location': '5555'
},
{
    'name': 'Some different title',
    'id': '122',
    'location': '6666'
}]

任何建议都将受到赞赏。

如果有帮助,我创建了一个包含数据的小提琴 - https://jsfiddle.net/e7t8ypmd/2/

1 个答案:

答案 0 :(得分:0)

试试这个......

我认为var a是你的对象......

var a ={your object};

var b = _.each(a.data.buildings, function (item) {
                    item.name = item.title;
                    item.id = item.item_id;
                    item.location = item.locations[0].location_id;
                });

var plucked = b.map(function (model) {
                    return _.pick(model, ["name", "id","location"]);
                });

变量'plucked'将只具有必需的属性。