javascript - underscore - Como posso converter uma matriz em um objeto dividindo seqüências de caracteres?




lodash vs underscore (5)

Eu tenho uma matriz como abaixo:

["gender-m", "age-20", "city-london", "lang-en", "support-home"]

Eu tentei gerar um objeto JSON:

{"gender":"m", "age":"20", "city":"london", "lang":"en", "support":"home"}

Uma solução em que posso pensar é usar o loop FOR para fazer isso, mas tenho certeza de que existem soluções elegantes para isso. Alguma sugestão, por favor me ajude.


Como você originalmente marcou isso como uma pergunta "Lodash", aqui está uma resposta baseada em 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>


Ele pode ser resolvido com divisão e um mapa. Para cada item dentro da matriz, substitua o - por : usando a divisão, ele será transformado em um valor-chave e, em seguida, atribua esses valores ao objeto que você deseja retornar.

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);


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

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


Você pode usar o método Array.reduce para fazer isso

["gender-m", "age-20", "city-london", "lang-en", "support-home"].reduce((rs, el) => {rs[el.split('-')[0]] = el.split('-')[1]; return rs;}, {});





lodash