gpt4 book ai didi

javascript - 通过 Id 使用新值更新数组的最佳方法

转载 作者:行者123 更新时间:2023-12-03 01:55:34 25 4
gpt4 key购买 nike

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

我在下面添加了示例片段来展示我正在尝试做的事情。请记住,这些数组可能包含数百个对象,并且需要每秒更新多次。

var array1 = [{
id:"asd4567wds8",
x: 109,
y: 763,
/* These values also have other properties that I need to keep */
}, {
id:"df567wgfdz4",
x: 450,
y: 132,
/* These values also have other properties that I need to keep */
}, {
id: "cvbz5476zzg",
x: 903,
y: 865,
/* These values also have other properties that I need to keep */
}]

var array2 = [{
id:"df567wgfdz4",
x: 450,
y: 137
},{
id:"asd4567wds8",
x: 114,
y: 763
}, {
id: "cvbz5476zzg",
x: 908,
y: 870
}]

$("document").ready(function(){
display();
$("#update").click(function(){
update();
display();
})
})

/*************************************
* Is there a better way to do this? *
*************************************/

function update(){
array1.forEach(function(element){
var temp = array2.find(function(element2){
return element.id === element2.id
})

element.x = temp.x
element.y = temp.y
})
}

function display(){
$("#Array1").empty();
$("#Array2").empty();
array1.forEach(function(element){
var p = $("<span>").text(`[${element.x}, ${element.y}]`)
$("#Array1").append(p)
})
array2.forEach(function(element){
var p = $("<span>").text(`[${element.x}, ${element.y}]`)
$("#Array2").append(p)
})
if(test(array1, array2)){
$("#test").text("Success!")
} else {
$("#test").text("Values do not match")
}
}



/* Test function do not change */
function test(array1, array2){
var clear = true;
array1.forEach(function(element){
var temp = array2.find(function(element2){
return element.id === element2.id
});

clear = (element.x === temp.x && element.y === temp.y)?clear:false
});

return clear;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div id="Array1">Array 1: </div>
<div id="Array2">Array 2: </div>

<button id="update">
Update
</button>
<h3 id="test"></h3>
</body>

上下文:我正在使用套接字创建一款游戏,并且我想用一大块游戏中其他对象的新位置来更新客户端。

最佳答案

您还可以在一个或两个数组上运行映射函数,以便获得@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;
});

关于javascript - 通过 Id 使用新值更新数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260199/

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