从对象数组开始:
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()
,然后再改回来,但这听起来比必要的复杂。
答案 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;
}
}
答案 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';
});