提取嵌入的对象元素

时间:2016-09-07 17:51:28

标签: javascript node.js

我有一个嵌入对象的对象,如下所示:

var object = { 'A' : 
                  {'cc' :  { 'cc data 1' : 'data 1 cc for A',
                             'cc data 2' : 'data 2 cc for A'
                           },
                   'dd' :   'data dd for A'
                  },
               'B' :
                  {'cc' : { 'cc data 1' : 'data 1 cc for B' ,
                            'cc data 2' : 'data 2 cc for B'
                          },
                   'dd' : 'data dd for B' 
                 }
            };

我希望为'cc'数据创建另一个对象并跳过'dd'数据。这段代码块说明了我要做的事情:

var newObj = {};
for ( key in object )   {
    newObj[key]             = {}                    ;
    newObj[key]['cc']       = {}                    ;
    newObj[key]['cc']       = object[key]['cc']     ;
}
console.log(util.inspect(newObj));

有更好的方法吗?我考虑使用选择,但无法确定如何。我认为使用通配符可能看起来像这样的解决方案:

  _.pick(object[ * ], 'cc' )   // does not work
谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用Object.keys()reduce()

var object = {
  'A': {
    'cc': 'Data cc for A',
    'dd': 'Data dd for A'
  },
  'B': {
    'cc': 'Data cc for B',
    'dd': 'Data dd for B'
  }
};

var newObj = Object.keys(object).reduce(function(r, e) {
  r[e] = {cc: object[e].cc};
  return r;
}, {});

console.log(newObj)

答案 1 :(得分:0)

你正在做的事情就像它将要获得的效率一样,你可以通过不创建中间对象来缩短它:

for (var key in object) {
  newObj[key] = {
    cc: object[key].cc
  }
}

答案 2 :(得分:0)

ES6的另一种可能性。更好?那一切都取决于许多事情,包括意见。



const javascriptObject = {
  'A': {
    'cc': 'Data cc for A',
    'dd': 'Data dd for A'
  },
  'B': {
    'cc': 'Data cc for B',
    'dd': 'Data dd for B'
  }
};
const myNewObject = {};
for (let key of Object.keys(javascriptObject)) {
  myNewObject[key] = Object.assign({}, javascriptObject[key]);
  delete myNewObject[key].dd;
}
console.log(myNewObject);