以下是一个例子:
// 0 1 2 3 4
var people = ['jack','jill','nancy','tom','cartman'];
var order = [3,1,4,0,2];
// somehow sort people array to the order specified in the order array
// 3 1 4 0 2
people == ['tom','jill','cartman','jack','nancy'];
之前我曾使用.sort和一个函数,但我仍然在这一点上不知所措。
更新
看到一些答案后,我无法相信这对我来说并不明显。因此,有很多方法可以做到这一点,获胜者将由jsperf确定。(我也赞成每个人都有一个有效的答案)
答案 0 :(得分:6)
sorted = []
order.forEach(function(i) { sorted.push(people[i]) });
或者,更加花哨但不太可读(IMO):
sorted = order.reduce(function(r, i) {
return r.concat([people[i]])
}, []);
答案 1 :(得分:4)
答案 2 :(得分:2)
order
是一系列的指标。因此,只需重复一遍,在spcified中提取所需的值,制作一个新的数组。
var people = ['jack','jill','nancy','tom','cartman'];
var order = [3,1,4,0,2];
var sorted = [];
for (var i = 0; i < order.length; i++) {
var desiredIndex = order[i];
sorted.push(people[desiredIndex]);
}
console.log(sorted);
// ["tom", "jill", "cartman", "jack", "nancy"]
有时排序不是“排序”。有时你只需要通过从其他事物中提取数据来创造新事物。
答案 3 :(得分:1)
我不知道,也许这样的事情?
var people = ['jack','jill','nancy','tom','cartman'];
var order = [3,1,4,0,2];
var result = [], i, n=order.length;
for (i=0; i<n; i++)
{
result[ order[i] ] = people[i];
}