javascript排序数组与订单数组对齐
以下是一个例子:javascript排序数组与订单数组对齐,javascript,arrays,sorting,Javascript,Arrays,Sorting,以下是一个例子: // 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 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决定
(同时,我投票给每个人一个有效的答案)
比赛强>
或者,更花哨但可读性较差(IMO):
我不知道,也许是这样的
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];
}
var people=['jack','jill','nancy','tom','cartman'];
风险值顺序=[3,1,4,0,2];
var result=[],i,n=order.length;
for(i=0;iorder
是一个指示符数组。因此,只需遍历它,从指定的顺序中取出所需的值,创建一个新数组
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"]
var people=['jack','jill','nancy','tom','cartman'];
风险值顺序=[3,1,4,0,2];
var排序=[];
对于(变量i=0;i
有时候,排序不是“排序”。有时候,你只需要从其他东西中提取数据来创造新事物。另一种方式:)
.胜利者首先应该由可读性和最清晰的意图来决定:)@Freshyeball:你的意思是它在你的情况下同样有效。并非在所有情况下都是如此。@FreshYeball取决于指向原始数组的其他内容。@FreshYeball:如果替换people
变量引用的数组,则只更新该引用。如果存在对原始阵列的其他引用,它们将不会自动更新以引用新阵列,因此您的引用将不同步。一切都取决于需要什么。我没有想到指针的情况。这一点很好。.map()
是实现这一点的唯一方法。@freshyeball我认为这并不奇怪。返回到基本构造(如for
循环)通常是最快的。在围绕map和reduce的大肆宣传下,我认为浏览器有一种方法可以优化这种操作,远远超出了基本的构造。@Freshyeball:主要是这些功能性方法提供了很好的干净代码。这些函数也可以在不同的情况下存储和重用。但是函数调用需要一些开销,所以当速度是一个高优先级时,传统的for
循环是一种方法。无函数迭代通常是最快的。即使它更冗长。
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];
}
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"]
people = order.map(function(value) { return people[value]; });