从对象数组中创建对象的特定字段数组

时间:2018-06-15 08:17:07

标签: javascript ecmascript-6

我想从一个对象数组中创建一个特定对象字段的数组。这就是我做的。它如何更有效率?

    var array_obectj = [
        {   a: 'somestring1',
            b: 42,
            c: false},
        {
            a: 'somestring2',
            b: 42,
            c: false
        }];

    var arrayP = [];

    for (var i in array_obectj){
        arrayP.push(array_obectj[i].a)
    }

3 个答案:

答案 0 :(得分:3)

您可以使用map()

var array_obectj = [{
    a: 'somestring1',
    b: 42,
    c: false
  },
  {
    a: 'somestring2',
    b: 42,
    c: false
  }
];

var arrayP = array_obectj.map(o => o.a);

console.log(arrayP);

Doc:map()

答案 1 :(得分:1)

您可以使用object destructuring,以便通过将属性指定为{a}来直接获取属性值。



var array_obectj = [
  {   a: 'somestring1',
      b: 42,
      c: false},
  {
      a: 'somestring2',
      b: 42,
      c: false
  }];

var arrayP =  array_obectj.map(({a}) => a);
console.log(arrayP);




答案 2 :(得分:0)

  

如何更有效率?

首先,我们需要使其正确; for-in不是loop through arraysfor。等效的是一个简单的for (var i = 0; i < array_object.length; ++i) { arrayP.push(array_obectj[i].a) } 循环:

Array#push

然后,你所拥有的已经非常有效。 JavaScript引擎可以很好地优化for (var i = 0; i < array_object.length; ++i) { arrayP[i] = array_obectj[i].a; }

其他选择:

  • 分配到循环中的下一个索引:

    push

    有些JavaScript引擎会优于push,但有些会更好map

  • 使用arrayP = array_object.map(e => e.a);

    map

    ...但请注意,map必须回拨您的回调函数。不过,浏览器也能很好地优化它。

然而,“如何更有效率”通常不是您想要问的问题。 “怎么能更清楚?” “我怎样才能确保代码易于阅读?” “我怎样才能使这个易于维护?”都是更好的问题。回答这些问题,我会说recordsCount是最清楚的。对于这种操作来说,这是一个特定的习惯用法。