如何提高合并,排序javascript数组的性能

时间:2016-03-09 15:34:52

标签: javascript arrays performance sorting

我有两个数组。一个是排序的,另一个不是。

排序的数组非常大,比方说90,000个条目。第二个数组将很短 - 目前不超过401。

问题是我加载了一个文件,并读取该文件以确定要放入短数组的值,当我完成该文件时,短数组必须与已排序的数组合并并序列化为磁盘。我按照你的预期进行合并和排序:

var hashes = [
"M2E0Mzk3YmItOWUzMC00ZmMwLWFhZDQtYTA0NTk0YWIwYjhjXw==mtg0mtq3nze2nw",
"M2ExZjNmNDktODdhOS00ODJiLTg2NzQtM2NiODQ1Njc1ZmYzXw==lte0mzg2otgxmdk",
"M2EzNTExM2UtY2JmYS00ZjAzLTgwZmMtMjg4ZDJkZjA5YzJjXw==mtcxmjqxmdc1mq",
"M2EzZjkzZDQtODUwYS00ZjlkLTg3ZmQtZjliNTFjZmYxNjVhXw==mjgzodu3nji3" ];

var append_to_hashes = [
"M2E2NGZjNWEtMzkwYy00YzE4LTkzM2EtNDVmNjE1MjE2ZDViXw==ltcxmzk1otawng",
"M2ExZjE2NGItNzUwZi00YTU4LWI3OGMtZDVkNDA2YWE2MzRmXw==ltq3odgznja2op",
"M2ExZjE2NGItNzUwZi00YTU4LWI3OGMtZDVkNDA2YWE2MzRmXw==ltq3odgznja2oa"];

if(append_to_hashes.length > 0){
   hashes = hashes.concat(append_to_hashes);
   hashes = hashes.sort();
}

但我想知道是否有更高性能的方法来连接和排序数组。

1 个答案:

答案 0 :(得分:0)

您可以对较小的数组进行排序,然后将每个项目插入适当的位置:

var big = [...]; // Big sorted array
var small = [...];  // Small unsorted array

small.sort();

for(let i = 0; i < big.length && small.length > 0; i++) {
    if(big[i].localeCompare(small[0]) > 0) {
        big.splice(i, 0, small.shift());
    }
}