簡體   English   中英

基於另一個數組排序數組(對象的更改順序)

[英]Sort array based on another array (change order of objects)

我有兩個Javascript數組對象,其中第一個按照我希望它排序的順序排序,第二個數組按錯誤的順序排序,例如:

1)SortedArray (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)

我想按照與第一個數組相同的順序對第二個數組進行排序,是否有一種簡單的方法可以解決這個問題?

任何幫助,將不勝感激。 謝謝。

條件:

1)第二陣列的大小可以不同。 所以它的值可能比第一個數組少。

2)如果數據損壞,第二個數組可以具有第一個數組中不存在的值。

更新

我根據Bergi的響應在這里構建了一個示例:jsfiddle.net/EPwS6 - 但現在我需要弄清楚如何在arr2中保存arr1中不存在的值。 任何想法或提示?

如果兩個數組包含相同的項目,但順序不同,則很容易:只需將第一個數組復制到第二個數組即可。 使用直接引用或slice來創建新數組。

如果兩個數組包含具有相似鍵的不同對象,則會變得更加困難。 然而,您可以通過創建查找表輕松管理它:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM