4

这是一个例子:

            //    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 决定。

(我也用一个有效的答案来支持每个人)

比赛!http://jsperf.com/array-sorted-to-order-array3

4

4 回答 4

6
sorted = []
order.forEach(function(i) { sorted.push(people[i]) });

或者,更花哨但可读性更低(IMO):

sorted = order.reduce(function(r, i) { 
    return r.concat([people[i]])
}, []);
于 2012-10-30T23:15:29.400 回答
4

只是另一种方式:)

people = order.map(function(value) { return people[value]; });

js小提琴

于 2012-10-30T23:22:19.770 回答
2

order是一系列指标。所以只需遍历它,按照指定的顺序取出你想要的值,创建一个新数组。

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"]

有时排序不是“排序”。有时您只需要通过从其他事物中提取数据来制作新事物。

于 2012-10-30T23:16:01.100 回答
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];
}
于 2012-10-30T23:15:54.797 回答