我有两个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中不存在的值。任何想法或提示?
答案 0 :(得分:2)
如果两个数组包含相同的项目,但顺序不同,则很容易:只需将第一个数组复制到第二个数组即可。使用直接引用,或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;