2013-03-22 82 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/