0

2 つの Javascript 配列オブジェクトがあります。最初の配列は並べ替えたい順序で並べ替えられ、2 番目の配列は間違った順序で並べ替えられます。次に例を示します。

1) ソート済み配列(0 - 10 items, 11 - 20 items, 21 - 30 items, 10000 - 20000 items)

2) アルファベット順にソートされた配列(0 - 10 items, 10000 - 20000 items, 11 - 20 items, 21 - 30 items)

2 番目の配列を最初の配列と同じ順序で並べ替えたいのですが、この問題を解決する簡単な方法はありますか?

どんな助けでも大歓迎です。ありがとうございました。

条件:

1) 2 番目の配列のサイズは異なる場合があります。したがって、最初の配列よりも値が少ない可能性があります。

2) データが破損している場合、2 番目の配列は最初の配列に存在しない値を持つことができます。

アップデート

Bergi の回答 (jsfiddle.net/EPwS6) に基づいてサンプルを作成しましたが、arr1 には存在しない値を arr2 に保存する方法を理解する必要があります。アイデアやヒントはありますか?

4

1 に答える 1

2

両方の配列に同じ項目が含まれていても、順序が異なる場合は簡単です。最初の配列を 2 番目の配列にコピーするだけです。直接参照を使用するかslice、新しい配列を作成してください。

2 つの配列に同様のキーを持つ異なるオブジェクトが含まれている場合は、さらに困難になります。それでも、ルックアップ テーブルを作成することで簡単に管理できます。

var table = {};
for (var i=0; i<arr2.length; i++)
    table[ arr2[i].getKey() ] = arr2[i];
for (var i=0; i<arr1.length; i++)
    arr2[i] = table[ arr1[i].getKey() ];
table = null;
// arr2 now ordered by the same keys as arr1, and its length is set to arr1.length

キーセットが同じでない場合は、次のようなものを使用できます。

var table = {};
for (var i=0; i<arr2.length; i++)
    table[ arr2[i].getKey() ] = arr2[i];
for (var i=0; i<arr1.length; i++) {
    var key = arr1[i].getKey();
    if (key in table) {
        arr2.push(table[key]); // add to array
        delete table[key]; // and prevent readding
    }
}
for (var key in table)
    arr2.push(table[key]); // add all leftover objects
table = null;
于 2012-12-05T10:56:40.940 に答える