我想从一个对象数组中创建一个特定对象字段的数组。这就是我做的。它如何更有效率?
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)
}
答案 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 arrays的for
。等效的是一个简单的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
是最清楚的。对于这种操作来说,这是一个特定的习惯用法。