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

如何提高合并、排序javascript数组的性能,javascript,arrays,performance,sorting,Javascript,Arrays,Performance,Sorting,我有两个数组。一个已排序,另一个未排序 排序后的数组相当大,比如说90000个条目。第二个阵列将很短-目前不超过401个 问题是我加载了一个文件,并读取该文件以确定要放入短数组的值,当我处理完该文件后,短数组必须与排序后的数组合并并序列化到磁盘。我按照您的预期进行合并和排序: var hashes = [ "M2E0Mzk3YmItOWUzMC00ZmMwLWFhZDQtYTA0NTk0YWIwYjhjXw==mtg0mtq3nze2nw", "M2ExZjNmNDktODdhOS00ODJiL

我有两个数组。一个已排序,另一个未排序

排序后的数组相当大,比如说90000个条目。第二个阵列将很短-目前不超过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();
}

但是我想知道是否有一种更有效的方法来连接和排序数组

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

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());
    }
}
var big=[…];//大排序数组
var small=[…];//小未排序数组
small.sort();
对于(设i=0;i0;i++){
if(大[i].localeCompare(小[0])>0){
big.splice(i,0,small.shift());
}
}

JavaScript项的长度可以超过40亿项,对于不需要处理GUI问题但只进行数据处理的代码来说,实际上80000个元素并不多。它是一个字母数字数组,值可以有不同的大小,因此我必须对此进行调整,否则“是”看起来是正确的。是的,您可以使用来比较字符串。为了获得更好的性能,可能是沿循环向下而不是向上?沿循环向下会稍微提高性能: