Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按Id使用新值更新数组的最佳方法_Javascript_Performance - Fatal编程技术网

Javascript 按Id使用新值更新数组的最佳方法

Javascript 按Id使用新值更新数组的最佳方法,javascript,performance,Javascript,Performance,性能是非常关键的,我希望有更好的方法通过Id更新数组。我正在寻找下面显示的更新函数的更好版本,它不需要在第二个数组中迭代太多次 我在下面添加了一个示例片段来说明我正在尝试做什么。请记住,这些数组可能包含数百个对象,并且需要每秒更新几次 变量数组1=[{ id:asd4567wds8, x:109, y:763, /*这些值还有我需要保留的其他属性*/ }, { id:df567wgfdz4, x:450, y:132, /*这些值还有我需要保留的其他属性*/ }, { id:cvbz5476z

性能是非常关键的,我希望有更好的方法通过Id更新数组。我正在寻找下面显示的更新函数的更好版本,它不需要在第二个数组中迭代太多次

我在下面添加了一个示例片段来说明我正在尝试做什么。请记住,这些数组可能包含数百个对象,并且需要每秒更新几次

变量数组1=[{ id:asd4567wds8, x:109, y:763, /*这些值还有我需要保留的其他属性*/ }, { id:df567wgfdz4, x:450, y:132, /*这些值还有我需要保留的其他属性*/ }, { id:cvbz5476zzg, x:903, y:865, /*这些值还有我需要保留的其他属性*/ }] 变量array2=[{ id:df567wgfdz4, x:450, y:137 },{ id:asd4567wds8, x:114, y:763 }, { id:cvbz5476zzg, x:908, y:870 }] $document.readyfunction{ 陈列 $update.clickfunction{ 使现代化 陈列 } } /************************************* *有更好的方法吗* *************************************/ 功能更新{ array1.forEachfunctionelement{ var temp=array2.findfunctionelement2{ 返回element.id==element2.id } 元素x=温度x 元素y=温度y } } 功能显示{ $Array1.0空; $Array2.0空; array1.forEachfunctionelement{ var p=$.text`[${element.x},${element.y}]` $Array1.p } array2.forEachfunctionelement{ var p=$.text`[${element.x},${element.y}]` $Array2.p } 如果是数组1,数组2{ $test.text成功! }否则{ $test.textValues不匹配 } } /*测试功能不改变*/ 功能测试阵列1,阵列2{ var clear=true; array1.forEachfunctionelement{ var temp=array2.findfunctionelement2{ 返回element.id==element2.id }; clear=element.x==temp.x&&element.y==temp.y?clear:false }; 返回清晰; } 阵列1: 阵列2: 使现代化
您还可以在一个或两个数组上运行map函数,以便获得@Doug提到的结构

object2 = { "df567wgfdz4" : { x: 450, y: 137 }, "asd4567wds8" : { x: 114, y: 763 }, "cvbz5476zzg": { x: 908, y: 870 }
获取上述内容的map函数如下所示:

array2.map(newObj => {
    var rObj = {};
    var sObj = {};
    sObj['x'] = newObj.x;
    sObj['y'] = newObj.y;
    rObj[newObj.id] = sObj;
    return rObj;
});

应该就在显示屏的正下方。你想让我把它搬上去吗?嗯,我把它往上推。一秒钟,有一个滚动条。德普。第二个代码框就在第一个下面,我忽略了这一点。是否可以将数组重组为对象?object2={df567wgfdz4:{x:450,y:137},asd4567wds8:{x:114,y:763},CVBZ5476ZZZG:{x:908,y:870}然后您可以只执行object2[id]@Doug我实际上可以重组array2。我会试一试!如果你不经常从array2中删除,那么你可以迭代一次,并将array2索引存储在array1的元素中。我没有看到性能的大幅提高,但是,这是一种更干净的方法来处理我正在做的事情。我将寻找其他解决方案来解决我的性能问题nce的问题,但是,我会给你们的答案的信用!感谢你们的信用!我认为这将有助于您的性能以及。如果您转换第二个数组如上所述,您可以这样做在您的更新函数:函数更新{var newArray=array2.mapnewObj=>{var rObj={};var sObj={};sObj['x']=newObj.x;sObj['y']=newObj.y;rObj[newObj.id]=sObj;返回rObj;};array1.forEachfunctionelement{element.x=newArray[element.id].x element.y=newArray[element.id].y}