Począwszy od tablicy obiektów:

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

Jak zmienić wartość danej właściwości jednego z obiektów, gdy inna podana właściwość w obiekcie jest ustawiona na daną wartość?

Na przykład, począwszy od mojej tablicy pokazanej powyżej, chcę zmienić value do "Newvalue", gdy name jest równa "nametochange".

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

Ps. Aby utworzyć początkową tablicę, używam jQuery's {x x0}} i nie chcę zmienić wartości <input name="nameToChange">. Przypuszczam, że mogę zmienić jego wartość, użyj serialArray(), a następnie zmienić go z powrotem, ale brzmi to bardziej skomplikowane niż to konieczne.

0
user1032531 7 grudzień 2013, 18:37

5 odpowiedzi

Najlepsza odpowiedź

Musisz przejść przez wszystkie elementy i wyszukać wymagany, a następnie zastąpić wartość.

for(var i = 0; i < array.length; i++){
    if(array[i]["name"] == str) {
        array[i]["value"] = newValue;
        break;
    }
}
0
Zero Fiber 7 grudzień 2013, 14:42

Najprostszym sposobem jest Iteracter w tej tablicy:

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

Nie będziesz w stanie wykonać tych samych rzeczy o native 'indexof', ponieważ obiekty mają być porównywane.

1
raina77ow 7 grudzień 2013, 14:41
for (var i = 0; i < array.length; i++) {
    if (array[i].name == 'nameToChange') {
        array[i].value = 'value';
        break;
    }
}

Fiddle Demo

1
Tushar Gupta - curioustushar 7 grudzień 2013, 14:42

Jest rok 2013; Pomiń wszystkie brudne {x0}} pętle i użyj forEach. Jest znacznie prostszy i semantycznie czyszczący:

array.forEach(function (e) {
  if (e.name == 'nameToChange')
    e.value = 'newValue';
})
0
meagar 7 grudzień 2013, 14:43

Ponieważ używasz jQuery, możesz użyć tego:

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

Skrzypce

0
Sergio 7 grudzień 2013, 14:59