2013-03-22 2 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
for (var key in rights) { 

key = key.toLowerCase(); 

} 

здесь скрипку: http://jsfiddle.net/btevfik/JBAXr/


ОК это не на самом деле обновить ключ. просто дает вам ключ в нижнем регистре.

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

Спасибо! Оно работает! –

+0

Зачем использовать дополнительный массив? – jfriend00

+0

Да, это избыточно, мне просто не нравится идея, когда вы перебираете массив и меняете его в одно и то же время, это может ввести в заблуждение. У меня есть C# и немного фона Java, поэтому кажется, что в js world это прекрасно :) – Andrew

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/