0

オブジェクトのインデックスがあります:

indexArray = [
    {obj 1},
    {obj 2},
    ...
    {obj n}
];

並べ替えアルゴリズムを適用すると、indexArray が混同されてしまいます。

indexArray = [
    {obj 77},
    {obj 36},
    ...
    {obj 8}
];

元の配列に 1 つの要素があり、その前後の Index を追跡したい場合。たとえば、obj 36 はソート前は index[35] でしたが、新しいインデックスは index[1] です。新しいインデックスをどのように決定しますか。

ソート前に一時変数の要素/obj36 を保持し、ソート後に indexArray に obj36 の現在のインデックスを問い合わせることはできますか? もしそうなら、どのように?

4

2 に答える 2

1

はい、一時変数を使用してそれを参照し、ソートされた配列でそれを探すとうまくいきます。利用可能な場合はメソッドを使用するArray.prototype.indexOfか、単にループして検索することができます。

于 2012-07-16T05:25:49.903 に答える
0

あなたはこれを行うことができます:

  • アレイを作成します。
  • それを別の配列にコピーします。
  • 元のものを並べ替えます。
  • 未ソートでソート済みの itens の出現を検索します。

見てみましょう:

// original array of objects
var a = [{
    n: 5
}, {
    n: 3
}, {
    n: 7
}, {
    n: 1
}];

// create a copy of the original (concats the original with a empty one)
var b = a.concat([]);

// sorting
a.sort( function( left, right ) {
    return left.n - right.n;
});

// print a values
for ( var i in a ) {
    console.log( a[i].n );
}

// print b values
for ( var i in b ) {
    console.log( b[i].n );
}

// searching...
for ( var i in a ) {
    console.log( "value: " + a[i].n +
                 " original index: " + b.indexOf(a[i]) +
                 " current index: " + i );
}

配列関数に関する情報については、こちらをご覧ください。

于 2012-07-16T05:29:18.170 に答える