0

可以说我有这样的架构:

users: {
   friends: [{name: String, id: String}]
}

将此对象数组提取到两个单独的数组中的最快方法是什么:

var names = [String]
var ids = [String]

有没有办法在没有 for 循环的情况下做到这一点?需要为一组用户完成此操作,并且我试图避免嵌套 for 循环。也许有更好的方法来存储朋友的姓名和 ID?

4

2 回答 2

3

使用Array.map()

var names = users.friends.map(function(o) { return o.name; }),
    ids   = users.friends.map(function(o) { return o.id;   });
于 2013-01-19T13:51:28.847 回答
2

总有一个循环,某处(我不确定你所说的嵌套循环是什么意思?)。:)

如果您正在寻找最快(这就是您所说的),那么使用 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;
}

地图调用很方便,但可能不是最快的。

于 2013-01-19T15:35:21.943 回答