gpt4 book ai didi

javascript - 基于另一个数组对数组进行排序(更改对象的顺序)

转载 作者:行者123 更新时间:2023-12-02 19:10:59 25 4
gpt4 key购买 nike

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

1) SortedArray (0 - 10 项、11 - 20 项、21 - 30 项、10000 - 20000 项)

2) 按字母顺序排序的数组(0 - 10 项、10000 - 20000 项、11 - 20 项、21 - 30 项)

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

如有任何帮助,我们将不胜感激。谢谢。

条件:

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

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

更新

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

最佳答案

如果两个数组包含相同的项目,但顺序不同,则很简单:只需将第一个数组复制到第二个数组即可。使用直接引用或切片来创建新数组。

如果两个数组包含具有相似键的不同对象,则会变得更加困难。不过,您可以通过创建查找表轻松管理它:

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

如果 key 集不同,您可能会采用如下方式:

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;

关于javascript - 基于另一个数组对数组进行排序(更改对象的顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com