javascript - 使用另一个属性值更改数组中对象的属性值

标签 javascript arrays object

我有一个数组,如下所示。我想要实现的是一个函数,它将节点的 ID、x 和 y 作为输入,并在数组中进行相应的更改。

var nodes = [{ID:"101", x:100, y:200}
             ,{ID:"102", x:200, y:200}
             ,{ID:"103", x:300, y:300}
             ,{ID:"104", x:200, y:300}]; 

例如,function (102,200,300); 会将数组中第二个对象的 x 和 y 更新为 {ID:"102", x:200, y:300} .

我所做的是这样的:

function update(id,x,y){
    for (var i=0 in nodes){
        if (nodes[i].ID==id){
            nodes[i].x = x;
            nodes[i].y = y;
            break;
        }
    }
}

除了使用for循环和if条件来检查和更新之外,我想知道其他方法。提前致谢。

最佳答案

不太确定您在这里期待什么。如果你有一个非特定元素的数组,你最终会以某种方式循环,除非对象始终处于相同的顺序并且可以通过它们的索引访问。它们的 ID 是如何生成的/它们是如何推送到数组上的?

如果你想避免循环,你应该将对象存储在一个对象中,并将它们的 ID 作为键属性。

var nodes = {
    '101': {ID: '101', x:100, y:200},
    '102': {ID: '102', x:200, y:200},
    '103': {ID: '103', x:300, y:300},
    '104': {ID: '104', x:200, y:300}
};

然后您就可以直接访问它们。

function setv(id, x, y) {
    if (nodes.hasOwnProperty(id)) {
        nodes[id].x = x;
        nodes[id].y = y;
    }
}

此外,您应该避免使用 for..in在数组上 - 使用常规 for 循环,或 Array.prototype.forEach() .

循环对象并检查其属性和值的简单方法:

function logObj(obj) {
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            console.log(p, obj[p]);
        }
    }
}

关于javascript - 使用另一个属性值更改数组中对象的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857601/

相关文章:

arrays - 没有收到错误但没有看到输出

javascript - 鼠标移出事件不会移回按钮外

python - 如何广播到多索引

javascript - JS : pass variable onclick

java - 如何将数字转换为字节,类似于 postgres 中的 java

Iphone 对象 C - 数据、对象和数组

python - 为什么函数可以改变外部的对象?

javascript - 设置显示后Flash对象方法不可用 :none

Javascript 和自动分号插入

javascript - 使用 twitter API 有时会出错