javascript - ¿Cómo puedo convertir una matriz en un objeto dividiendo cadenas?
arrays json (7)
Como originalmente etiquetó esto como una pregunta "Lodash", aquí hay una respuesta basada en Lodash:
const arr = ["gender-m", "age-20", "city-london", "lang-en", "support-home"];
const obj = _.chain(arr)
.map(v => _.split(v, ''-''))
.fromPairs()
.value();
console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Tengo una matriz como la siguiente:
["gender-m", "age-20", "city-london", "lang-en", "support-home"]
Traté de generar un objeto JSON:
{"gender":"m", "age":"20", "city":"london", "lang":"en", "support":"home"}
Una solución que se me ocurre es usar el bucle FOR para hacerlo, pero estoy seguro de que hay soluciones elegantes para esto. Cualquier sugerencia, por favor ayúdame.
No creo que haya una manera elegante porque usas el signo "-" para separar la clave y el valor. Entonces, la mejor manera sería:
let element = {};
array.forEach(item => {
result = item.split("-");
element[result[0]] = result[1];
}
Puede tomar
Object.fromEntries
con los pares de clave / valor divididos.
var data = ["gender-m", "age-20", "city-london", "lang-en", "support-home"],
result = Object.fromEntries(data.map(s => s.split(''-'')));
console.log(result);
Puede usar el método
Array.reduce
para hacer eso
["gender-m", "age-20", "city-london", "lang-en", "support-home"].reduce((rs, el) => {rs[el.split(''-'')[0]] = el.split(''-'')[1]; return rs;}, {});
Se puede resolver con división y un mapa, cada elemento dentro de la matriz reemplaza el - con : al usar la división se convertirá en un valor clave, luego se asignarán esos valores al objeto que desea devolver.
var arrayObject = ["gender-m", "age-20", "city-london", "lang-en", "support-home"];
var objectResulted ={};
arrayObject.map(
function(item){
var splitedValue = item.split(''-'');
objectResulted [splitedValue[0]]= splitedValue[1]
});
console.log (objectResulted);
Utilice Array.reduce
const arr = ["gender-1", "age-m", "city-london", "lang-en", "support-home"]
arr.reduce((acc, c) => {
const str = c.split(''-'')
return {...acc, [str[0]]: str[1]}
}, {})
Utilice el método
Array.reduce
["gender-m", "age-20", "city-london", "lang-en", "support-home"].map(s => s.split(''-'')).reduce((rs, el) => {rs[el[0]] = el[1]; return rs;}, {});