[英]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.