2015-11-09 4 views
5

У меня есть массив из 10000 объектов. Каждый объект, как это:Как переименовать ключ наиболее эффективно в массиве элементов в javascript?

{"id":5, "name": "Jordin Sparks} 

Что является наиболее эффективным и быстрым способом для меня, чтобы переименовать ключи таким образом, что каждый объект в массиве становится:

{"num":5, "fullname": "Jordin Sparks"} 

Другими словами, свойство «идентификатор» переименовывается в «num», а свойство «name» для каждого объекта переименовывается в «fullname».

+0

Возможный дубликат [JavaScript: Object Rename Key] (http://stackoverflow.com/questions/4647817/javascript-object-rename-key) –

+0

Почему вы не можете использовать эти имена в первую очередь ? –

+0

Какую совместимость вы ищете? Можно ли использовать какие-либо функции для достижения этой эффективности? У объектов, о которых идет речь, гарантировано наличие только этих ключей? Эффективность пространства или эффективность времени? ... Эффективность лучше всего понимается в контексте. – allonhadaya

ответ

0

От https://stackoverflow.com/a/4648411/5403473:

Object.prototype.renameProperty = function (oldName, newName) { 
    // Do nothing if the names are the same 
    if (oldName == newName) { 
     return this; 
    } 

    // Check for the old property name to avoid a ReferenceError in strict mode. 
    if (this.hasOwnProperty(oldName)) { 
     this[newName] = this[oldName]; 
     delete this[oldName]; 
    } 

    return this; 
}; 

Убежишь objectOf1000.renameProperty('id', 'num') и objectOf1000.renameProperty('name', 'full name')

1

Я понятия не имею, если это действительно наиболее эффективным, но вот моя попытка.

1

Лично я сделал бы это так.

function renameKeys(arr, nameMap) { 
    // loop around our array of objects 
    for(var i = 0; i < arr.length; i++) { 
    var obj = arr[i]; 
    // loop around our name mappings 
    for(var j = 0; j < nameMap.length; j++) { 
     var thisMap = nameMap[j]; 
     if(obj.hasOwnProperty(thisMap.from)) { 
     // found matching name 
     obj[thisMap.to] = obj[thisMap.from]; 
     delete obj[thisMap.from]; 
     } 
    } 
    } 
} 

Вы бы назвали это так, где myArray - это ваш массив объектов.

renameKeys(myArray, [ 
    {from: "id", to: "num" }, 
    { from: "name", to: "fullname" } 
]); 

Имеет то преимущество, что оно может использоваться повторно для любого количества повторных отображений имен. Не модифицирует собственные прототипы. И только однократно повторяется вокруг массива, независимо от того, сколько повторных отображений происходит.

1

Метод грубой силы. Преобразовать в строку, переименовать поля и разобрать на JSON

var src = {"id":5, "name": "Jordin Sparks"}; 

var str = JSON.stringify(src); 

var rst = JSON.parse(str.replace(/"id"/g, '"num"').replace(/"name"/g, '"fullname"')); 
console.debug(rst); 

Изменить: изменить замену на глобальную.

+0

Похоже, что это может быть самый быстрый, но вам нужно будет запустить тайминги, чтобы убедиться, что метод naiive не быстрее – jamylak

0
arr.map(function (item) { return { num: item.id, fullname: item.name } }); 
Смежные вопросы