2012-10-25 61 views
5

我的keyValue構造的3個對象的在javacsript數組:如何更新數組值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")); 

我也有一個函數「更新」這需要keyValue object as parameter並更新該對象的值的陣列中:

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; 
    } 

但我想要一個更好的方法來做到這一點,如果有的話。

+4

爲什麼不使用對象? var dict = {「a」:1,「b」:2,「c」:3};'然後你可以像'dict.a = 23;'或'dict [「a」] = 23 ;'... – canon

+1

佳能的迴應可能是一個答案 –

+0

@AndréPena我已經提出它的答案。 – canon

回答

10

「但是我想知道更好的方法來做到這一點,如果有的話?

是的,因爲您似乎已經有了原始對象,所以沒有理由再從數組中獲取它。

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

爲什麼不使用對象?

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

然後你就可以像這樣

dict.a = 23; 

dict["a"] = 23; 

如果你wan't刪除特定的鍵,它的簡單更新爲:

delete dict.a; 

Objects vs arrays in Javascript for key/value pairs
請參閱delete運營商。

+0

你沒有更新密鑰。只是價值。雖然實際情況可能不會允許。當前的存儲似乎暗示除了通過對該對象的一些替代引用之外,不會知道密鑰。 –

+0

我在改變鍵值對的關鍵字方面看不到多少點...但是這並不妨礙他從對象中添加,更新和刪除屬性(通過鍵)。 – canon

+0

當然,問題是在這個問題中有一個對象有兩個屬性的替代引用。我們不知道原因,但將'Key'屬性作爲查找標識符可能不太合適。 –

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

怎麼樣;

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原型繼承將是一個很好的解決方案。 –