在javascript中从对象数组中提取两个数组的最快方法

时间:2013-01-19 13:48:03

标签: javascript mongodb mongoose

假设我有这样的架构:

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

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

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

有没有办法在没有for循环的情况下执行此操作?需要对一组用户执行此操作,并尝试避免嵌套for循环。也许有更好的方式来存储朋友的名字和ID?

2 个答案:

答案 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)

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

如果您正在寻找最快的(这就是您所说的),使用mapforEach通常不会导致更快的操作,因为每次迭代都会调用功能,增加了开销。

正如您在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;
}

地图通话很方便,但可能不是最快的。