可以说我有这样的架构:
users: {
friends: [{name: String, id: String}]
}
将此对象数组提取到两个单独的数组中的最快方法是什么:
var names = [String]
var ids = [String]
有没有办法在没有 for 循环的情况下做到这一点?需要为一组用户完成此操作,并且我试图避免嵌套 for 循环。也许有更好的方法来存储朋友的姓名和 ID?
可以说我有这样的架构:
users: {
friends: [{name: String, id: String}]
}
将此对象数组提取到两个单独的数组中的最快方法是什么:
var names = [String]
var ids = [String]
有没有办法在没有 for 循环的情况下做到这一点?需要为一组用户完成此操作,并且我试图避免嵌套 for 循环。也许有更好的方法来存储朋友的姓名和 ID?
使用Array.map()
:
var names = users.friends.map(function(o) { return o.name; }),
ids = users.friends.map(function(o) { return o.id; });
总有一个循环,某处(我不确定你所说的嵌套循环是什么意思?)。:)
如果您正在寻找最快(这就是您所说的),那么使用 amap
或 aforEach
通常不会导致更快的操作,因为每次迭代都调用一个函数,这会增加开销。
正如您将在此jsPerf中看到的,通常最好使用 for-loop 构造。首先,如果数组很长,您将受益于只遍历数组一次(而不是每个属性一次)。为了进一步优化,预先声明数组大小也可以提高性能。
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;
}
地图调用很方便,但可能不是最快的。