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

jsFiddle

于 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 に答える