Javascript 优化更新或推入大型阵列

Javascript 优化更新或推入大型阵列,javascript,Javascript,我有一个巨大的数组(~200-300k个对象)和已经填充的数组,可以是任何大小。当两个阵列都很小时,不会出现性能问题,但是当两个阵列都变大时,更新值会花费很多时间 如果array2中存在对象,用他的值更新array1中对象的最快方法是什么 目前尝试使用.splice()和array[index]两种方法,根据键查找之前的索引,但这需要花费大量时间,比如一分钟或两分钟 let i = this.array2.length; while (i--) { const row = this.ar

我有一个巨大的数组(~200-300k个对象)和已经填充的数组,可以是任何大小。当两个阵列都很小时,不会出现性能问题,但是当两个阵列都变大时,更新值会花费很多时间

如果
array2
中存在对象,用他的值更新
array1
中对象的最快方法是什么

目前尝试使用
.splice()
array[index]
两种方法,根据键查找之前的索引,但这需要花费大量时间,比如一分钟或两分钟

let i = this.array2.length;
while (i--) {
    const row = this.array2[i];
    let existingSensorIndex = array1.findIndex(s => s.id === row.id);
    let node = this.convertToObject(row);

    if (existingSensorIndex !== -1) {
        array1.splice(existingSensorIndex, 1, node);
    } else {
        array1.push(node);
    }
}

您可以尝试使用Lodash:

_.unionBy(arr1, arr2, function(a){return a.id;});

不确定您到底想做什么,但使用
for
和稀疏数组可能就可以了。考虑以下事项:

var数组1=[];
var array2=[];
对于(i=0;i<200000;i++)数组1[i*2]=Math.random();
对于(i=0;i<2000000;i++)array2[i*3]=Math.random();
var=0;
console.time();
对于(i=0;i控制台日志(更新,“更新”)您是否考虑过在索引键时不使用数组而使用对象?(键可以是您的“id”值,所以当您想查看它是否存在时,只需查看
object2[id]
是否存在即可。)您是否考虑过使用映射而不是数组?事实上,没有,很好的捕捉:)你在
数组1
中拥有的越多,
findIndex
可能会变得更糟,因为它会进行线性搜索。地图或对象可以直接查找您的id。您能详细说明一下为什么它更快吗?它不会比从地图获取更快。它提供了通过嵌套对象进行过滤的优势。