2013-03-22 140 views
1

在JavaScript中我有下面的代碼:如何修改JavaScript對象名稱?

var rights = { 
    'One': [ 1, 1, 0], 
    'Two': [ 1, 0, 0], 
    'Three': [ 0, 1, 1 ] 
}; 

和打印:

for (item in rights) Response.Write(item + ' = ' + rights[item] + '<br />'); 

另外,我可以通過這個訪問任何元素對象:

rights['One'] or rights[0] 

但我怎麼能遍歷通過這個對象使索引縮小,使其變成如下:

var rights = { 
    'one': [ 1, 1, 0], 
    'two': [ 1, 0, 0], 
    'three': [ 0, 1, 1 ] 
}; 

回答

0
var fieldNames = []; 
for (item in rights) { fieldNames.push(item); } 
for(i = 0; i < fieldNames.length; i++) { 
    var fieldName = fieldNames[i]; 
    var value = rights[fieldName]; 
    delete rights[fieldName]; 

    rights[fieldName.toLowerCase()] = value;  
} 
+0

謝謝!有用! – 2013-03-22 06:36:57

+0

爲什麼要使用額外的數組? – jfriend00 2013-03-22 15:30:44

+0

是的,這是多餘的,我只是不喜歡這個想法,當你迭代數組並且在同一時間改變它時,它可能會引起誤解。我有C#和一點Java背景,所以它似乎在JS世界這是好的:) – Andrew 2013-03-22 18:52:57

4

您不能直接更改密鑰。您可以獲取密鑰及其值,使用小寫鍵值設置新密鑰,然後刪除原始密鑰。

var rights = { 
    'One': [ 1, 1, 0], 
    'Two': [ 1, 0, 0], 
    'Three': [ 0, 1, 1 ] 
}; 

for (var key in rights) { 
    var keyLower = key.toLowerCase(); 
    // if key is not already lower case 
    if (keyLower !== key) { 
     var temp = rights[key]; 
     delete rights[key]; 
     rights[keyLower] = temp; 
    } 
} 

// all keys in the rights object will now be lowercase 

工作演示:http://jsfiddle.net/jfriend00/U9vFQ/