0

我有两个 Javascript 数组对象,其中第一个按我希望它的排序顺序排序,第二个数组按错误顺序排序,例如:

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)

我想按照与第一个数组相同的顺序对第二个数组进行排序,有没有简单的方法来解决这个问题?

任何帮助,将不胜感激。谢谢你。

条件:

1)第二个数组的大小可以不同。所以它的值可能比第一个数组少。

2) 如果数据损坏,第二个数组可以有第一个数组中不存在的值。

更新

我根据 Bergi 的回复在这里构建了一个示例:jsfiddle.net/EPwS6 - 但现在我需要弄清楚如何在 arr2 中保留 arr1 中不存在的值。有什么想法或提示吗?

4

1 回答 1

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;
于 2012-12-05T10:56:40.940 回答