2012-10-25 10 views
5

Mam tablicę z 3 obiektów konstruktora keyvalue w javacsript:Jak zaktualizować tablicę wartości javascript?

function keyValue(key, value){ 
    this.Key = key; 
    this.Value = value; 
    }; 

    var array = []; 
    array.push(new keyValue("a","1"),new keyValue("b","2"),new keyValue("c","3")); 

Mam też funkcję „Aktualizuj”, która zajmuje keyValue object as parameter i aktualizuje wartość tego obiektu w tablicy:

function Update(keyValue, newKey, newValue) 
    { 
    //Now my question comes here, i got keyValue object here which i have to 
    //update in the array i know 1 way to do this 

    var index = array.indexOf(keyValue); 
    array[index].Key = newKey; 
    array[index].Value = newValue; 
    } 

Ale chcę lepszy sposób to zrobić, jeśli istnieje.

+4

Dlaczego nie użyć obiektu? 'var dict = {" a ": 1," b ": 2," c ": 3};', a następnie możesz go zaktualizować jak 'dict.a = 23;' lub 'dict [" a "] = 23 ; '... – canon

+1

Odpowiedź canon może być odpowiedzią –

+0

@ AndréPena. Awansowałem ją na odpowiedź. – canon

Odpowiedz

10

"Ale chcę wiedzieć lepszy sposób to zrobić, jeśli istnieje?"

Tak, ponieważ wydaje się, że masz już oryginalny obiekt, nie ma powodu, aby go pobrać ponownie z Tablicy.

function Update(keyValue, newKey, newValue) 
    { 
    keyValue.Key = newKey; 
    keyValue.Value = newValue; 
    } 
9

Dlaczego nie użyć obiektu ?

var dict = { "a": 1, "b": 2, "c": 3 }; 

Następnie można zaktualizować go jak tak

dict.a = 23; 

lub

dict["a"] = 23; 

Jeśli wa usunąć konkretnego klucza, to jest tak proste, jak:

delete dict.a; 

Zobacz Objects vs arrays in Javascript for key/value pairs.
Wyświetl operatora delete.

+0

Nie aktualizujesz klucza. Tylko wartość. Chociaż faktyczna sytuacja może na to nie pozwolić. Obecne przechowywanie zdaje się sugerować, że klucz nie będzie znany, z wyjątkiem pewnego alternatywnego odniesienia do tego obiektu. –

+0

Nie widzę sensu w zmianie klucza pary klucz-wartość ... ale to nie powstrzymuje go od dodawania, aktualizowania i usuwania właściwości (przez klucz) z obiektu. – canon

+0

Oczywiście, chodzi o to, że w pytaniu istnieje alternatywne odniesienie do obiektu z dwiema właściwościami. Nie znamy przyczyny, ale bardzo dobrze może nie być odpowiednia właściwość 'Key' jako identyfikator wyszukiwania. –

6
function Update(key, value) 
{  
    for(var i=0;i<array.length;i++){ 
    if(array[i].Key==key){ 
     array[i].Value=value; 
     break; 
    } 
    } 
} 
3

Co na ten temat;

function keyValue(key, value){ 
    this.Key = key; 
    this.Value = value; 
}; 
keyValue.prototype.updateTo = function(newKey, newValue) { 
    this.Key = newKey; 
    this.Value = newValue; 
}; 

array[1].updateTo("xxx", "999"); 
+0

+1 prototypowe dziedzictwo byłoby dobrym rozwiązaniem. –

Powiązane problemy