javascript - ¿Cómo puedo convertir una matriz en un objeto dividiendo cadenas?




arrays json (5)

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 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 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;}, {});





lodash