¿Hay alguna forma inteligente (es decir, optimizada) de cambiar el nombre de una clave en un objeto javascript?
Una forma no optimizada sería:
o[ new_key ] = o[ old_key ];
delete o[ old_key ];
javascript
object
key
rename
Jean Vincent
fuente
fuente
Respuestas:
Creo que la forma más completa (y correcta) de hacerlo sería:
Este método asegura que la propiedad renombrada se comporte de manera idéntica a la original.
Además, me parece que la posibilidad de envolver esto en una función / método y ponerlo
Object.prototype
es irrelevante con respecto a su pregunta.fuente
if (old_key !== new_key)
a:if (old_key !== new_key && o[old_key])
Puede ajustar el trabajo en una función y asignarlo al
Object
prototipo. Tal vez use el estilo de interfaz fluido para hacer fluir múltiples cambios de nombre.ECMAScript 5 específico
Desearía que la sintaxis no fuera tan compleja, pero definitivamente es bueno tener más control.
fuente
Object.defineProperty
.hasOwnProperty
para verificar las propiedades y dentro de losfor ... in
bucles, entonces ¿por qué importa si ampliamos Object?Si está mutando su objeto fuente, ES6 puede hacerlo en una línea.
O dos líneas si desea crear un nuevo objeto.
fuente
[]
alrededornewKey
? La solución funciona sin eso en realidad.En caso de que alguien necesite cambiar el nombre de una lista de propiedades:
Uso:
fuente
my_object_property
amyObjectProperty
, sin embargo, si mi propiedad era de una sola palabra, entonces la clave fue eliminada. +1¡Me gustaría simplemente usar el
ES6(ES2015)
camino!fuente
Si no desea mutar sus datos, considere esta función ...
Una explicación detallada de Yazeed Bzadough https://medium.com/front-end-hacking/immutably-rename-object-keys-in-javascript-5f6353c7b6dd
fuente
La mayoría de las respuestas aquí no logran mantener el orden de pares clave-valor del objeto JS. Si tiene una forma de pares de clave-valor de objeto en la pantalla que desea modificar, por ejemplo, es importante preservar el orden de las entradas de objeto.
La forma ES6 de recorrer el objeto JS y reemplazar el par clave-valor con el nuevo par con un nombre clave modificado sería algo así como:
La solución conserva el orden de las entradas al agregar la nueva entrada en lugar de la anterior.
fuente
Puedes probar lodash
_.mapKeys
.fuente
Una variación usando el operador de desestructuración y propagación de objetos:
fuente
Personalmente, la forma más efectiva de cambiar el nombre de las claves en el objeto sin implementar complementos y ruedas extra pesados:
También puede envolverlo
try-catch
si su objeto tiene una estructura no válida. Funciona perfectamente :)fuente
'a'
de{ a: 1, aa: 2, aaa: 3}
o tratar de cambiar el nombre de un objeto con valores que son algo más que cadenas o números o booleanos, o tratar con referencias circulares.Para agregar prefijo a cada clave:
fuente
Haría algo como esto:
fuente
Diría que sería mejor desde un punto de vista conceptual simplemente dejar el objeto antiguo (el del servicio web) como está, y poner los valores que necesita en un objeto nuevo. Supongo que está extrayendo campos específicos en un punto u otro de todos modos, si no en el cliente, al menos en el servidor. El hecho de que elija usar nombres de campo que sean los mismos que los del servicio web, solo en minúsculas, realmente no cambia esto. Entonces, aconsejaría hacer algo como esto:
Por supuesto, estoy haciendo todo tipo de suposiciones aquí, lo que puede no ser cierto. Si esto no se aplica a usted, o si es demasiado lento (¿no es así? No lo he probado, pero imagino que la diferencia se reduce a medida que aumenta el número de campos), ignore todo esto :)
Si no desea hacer esto, y solo tiene que admitir navegadores específicos, también puede usar los nuevos captadores para devolver también "mayúsculas (campo)": consulte http://robertnyman.com/2009/05/28 / getters-and-setters-with-javascript-code-samples-and-demos / y los enlaces en esa página para obtener más información.
EDITAR:
Increíblemente, esto también es casi el doble de rápido, al menos en mi FF3.5 en el trabajo. Ver: http://jsperf.com/spiny001
fuente
Si bien esto no proporciona exactamente una mejor solución para cambiar el nombre de una clave, proporciona una forma ES6 rápida y fácil de cambiar el nombre de todas las claves en un objeto sin mutar los datos que contienen.
fuente
Algunas de las soluciones enumeradas en esta página tienen algunos efectos secundarios:
Aquí hay una solución que mantiene la posición de la clave en el mismo lugar y es compatible con IE9 +, pero tiene que crear un nuevo objeto y puede no ser la solución más rápida:
Tenga en cuenta: IE9 puede no ser compatible con cada uno en modo estricto
fuente
Aquí hay un ejemplo para crear un nuevo objeto con claves renombradas.
fuente
Otra forma más con el método REDUCE más poderoso .
fuente
Esta es una pequeña modificación que hice a la función de pomber; Para poder tomar una matriz de objetos en lugar de un objeto solo y también puede activar el índice. También las "claves" pueden ser asignadas por una matriz
prueba
fuente
Tu camino está optimizado, en mi opinión. Pero terminarás con las claves reordenadas. La clave recién creada se agregará al final. Sé que nunca debe confiar en el orden de las claves, pero si necesita preservarlo, deberá revisar todas las claves y construir un nuevo objeto uno por uno, reemplazando la clave en cuestión durante ese proceso.
Me gusta esto:
fuente
fuente
solo pruébalo en tu editor favorito <3
fuente