Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript排序数组与订单数组对齐_Javascript_Arrays_Sorting - Fatal编程技术网

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;i
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"]
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]; });