假设我有这样的架构:
users: {
friends: [{name: String, id: String}]
}
将此对象数组提取到两个单独数组中的最快方法是什么:
var names = [String]
var ids = [String]
有没有办法在没有for循环的情况下执行此操作?需要对一组用户执行此操作,并尝试避免嵌套for循环。也许有更好的方式来存储朋友的名字和ID?
答案 0 :(得分:3)
使用Array.map()
:
var names = users.friends.map(function(o) { return o.name; }),
ids = users.friends.map(function(o) { return o.id; });
答案 1 :(得分:2)
总有一个循环,某个地方(我不确定你的嵌套循环是什么意思?)。 :)
如果您正在寻找最快的(这就是您所说的),使用map
或forEach
通常不会导致更快的操作,因为每次迭代都会调用功能,增加了开销。
正如您在jsPerf中看到的那样,使用for循环结构通常会更好。首先,如果数组很长,你只需要通过一次数组(而不是每个属性一次)。为了进一步优化,预先确定阵列大小也可以提高性能。
var names = new Array(totalFriends),
ids = new Array(totalFriends), friend;
for (var j = 0; j < totalFriends; j++) {
friend = friends[j];
names[j] = friend.name;
ids[j] = friend.id;
}
地图通话很方便,但可能不是最快的。