更改数组中的特定对象

时间:2013-12-07 14:37:36

标签: javascript jquery

从对象数组开始:

var array=[
    {name:"name1",value:"value1"},
    {name:"nameToChange",value:"oldValue"},
    {name:"name3",value:"value3"}
];

当对象中的另一个给定属性设置为给定值时,如何更改其中一个对象的给定属性的值?

例如,从上面显示的数组开始,当value等于“nameToChange”时,我希望将name更改为“newValue”。

var array=[
    {name:"name1",value:"value1"},
    {name:"nameToChange",value:"newValue"},
    {name:"name3",value:"value3"}
];

PS。要创建初始数组,我使用的是jQuery的serializeArray(),我不想更改<input name="nameToChange">的值。我想我可以改变它的值,使用serialArray(),然后再改回来,但这听起来比必要的复杂。

5 个答案:

答案 0 :(得分:1)

最简单的方法是迭代这个数组:

var i = arr.length;
while (i--) {
  if (arr[i].name === 'nameToChange') {
    arr[i].value = 'newValue';
    break; 
  } 
}

您将无法使用原生'indexOf'执行相同的操作,因为要比较对象。

答案 1 :(得分:1)

for (var i = 0; i < array.length; i++) {
    if (array[i].name == 'nameToChange') {
        array[i].value = 'value';
        break;
    }
}

fiddle Demo

答案 2 :(得分:0)

您需要遍历所有元素并搜索所需元素,然后替换为值。

for(var i = 0; i < array.length; i++){
    if(array[i]["name"] == str) {
        array[i]["value"] = newValue;
        break;
    }
}

答案 3 :(得分:0)

这是2013年;跳过所有凌乱的for循环并使用forEach。它更简单,语义更清晰:

array.forEach(function (e) {
  if (e.name == 'nameToChange')
    e.value = 'newValue';
})

答案 4 :(得分:0)

由于您使用的是jQuery,因此可以使用:

$.each(array, function () {
    if(this.name == 'nameToChange') this.value = 'value';
});

Fiddle