2015-11-09 9 views
5

Ho una matrice di 10000 oggetti. Ogni oggetto è come questo:Come rinominare la chiave in modo più efficiente nella matrice di elementi in javascript?

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

Qual è il modo più efficiente e veloce per me per rinominare i tasti in modo tale che ogni oggetto nella matrice diventa:

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

In altre parole, la proprietà "id" viene rinominato in "num" e la proprietà "name" per ogni oggetto viene rinominata in "fullname".

+0

Possibile duplicato di [JavaScript Object Rinomina chiave] (http://stackoverflow.com/questions/4647817/javascript-object-rename-key) –

+0

Perché non è possibile utilizzare questi nomi, in primo luogo ? –

+0

Quale compatibilità stai cercando? È possibile utilizzare qualsiasi funzionalità per ottenere questa efficienza? Gli oggetti in questione sono garantiti per avere solo queste chiavi? Efficienza dello spazio o efficienza temporale? ... L'efficienza è meglio compresa nel contesto. – allonhadaya

risposta

0

Da 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; 
}; 

Si potrebbe correre objectOf1000.renameProperty('id', 'num') e objectOf1000.renameProperty('name', 'full name')

1

ho idea se questo è davvero il più efficace, ma qui è il mio tentativo.

1

Personalmente, vorrei farlo in questo modo.

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]; 
     } 
    } 
    } 
} 

Lo chiamereste così, dove myArray è la vostra serie di oggetti.

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

Ha il vantaggio che è riutilizzabile per qualsiasi numero di ridisegnazioni di nomi. Non modifica i prototipi nativi. E itera solo una volta attorno alla matrice, indipendentemente dal numero di ri-mappature che avvengono.

1

avvicinamento forza bruta. Converti in stringa, rinomina campi e analizza in 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); 

Modifica: modifica sostituisci globale.

+0

Sembra che potrebbe essere il più veloce, ma è necessario eseguire i tempi per essere sicuri che l'approccio naiive non sia più veloce – jamylak

0
arr.map(function (item) { return { num: item.id, fullname: item.name } }); 
Problemi correlati