2011-07-24 98 views
18

如何更改對象數組中的鍵名?更改對象數組中的鍵名?

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}]; 

我怎樣才能改變每個key1stroke讓我得到:

var arrayObj = [{stroke:'value1', key2:'value2'},{stroke:'value1', key2:'value2'}]; 

回答

22
var i; 
for(i = 0; i < arrayObj.length; i++){ 
    arrayObj[i].stroke = arrayObj[i]['key1']; 
    delete arrayObj[i].key1; 
} 
+0

你可以在這裏看到它:http://jsfiddle.net/Paulpro/XVxvy/2/它警告「未定義」,然後「value1」 – Paulpro

+0

感謝您的解決方案,但如果對象是動態密鑰?例如:var arrayObj = [{abcKey,'value1',acdKey:'value2',defKey:'value3',cfgKey:'value4'}]; – Dhaval

3
function changeKey(originalKey, newKey, arr) 
{ 
    var newArr = []; 
    for(var i = 0; i < arr.length; i++) 
    { 
    var obj = arr[i]; 
    obj[newKey] = obj[originalKey]; 
    delete(obj[originalKey]); 
    newArr.push(obj); 
    } 
    return newArr; 
} 
2

你不改變一個鍵名。您可以分配一個新的密鑰名稱/值,然後如果需要刪除以前的密鑰。在您的例子:

var arrayObj = [{key1,'value1', key2:'value2'},{key1,'value1', key2:'value2'}]; 
var o = arrayObj[0]; // get first object 
var val = o.key1;  // get current value 
o.stroke = val;  // assign to new key 
delete o.key1;   // remove previous key 

如果你想這樣做,你的主陣列中的所有對象,你只想把在一個循環,在你的數組的內容進行迭代。我在這裏放置了更多的中間任務,而不是僅僅記錄正在發生的事情。

或循環縮短版:

for (var i = 0; i < arrayObj.length; i++) { 
    var o = arrayObj[i]; 
    o.stroke = o.key1; 
    delete o.key1; 
} 
12

您不能更改屬性名稱,你必須用一個新的名字添加值並刪除舊的屬性:

for (var i = 0; i < arrayObj.length; i++) { 
    arrayObj[i].stroke = arrayObj[i].key1; 
    delete arrayObj[i].key1; 
} 
+0

所有瀏覽器版本是否支持'delete'? –

+0

是的,它是Javascript語言的一部分。 – Guffa

+0

好的,出於某種原因,我認爲它不支持某些版本的IE瀏覽器或其他東西。 –