javascript - Как я могу преобразовать массив в объект, разделив строки?




arrays json (5)

Вы можете взять Object.fromEntries с разделенными парами ключ / значение.

var data = ["gender-m", "age-20", "city-london", "lang-en", "support-home"],
    result = Object.fromEntries(data.map(s => s.split('-')));

console.log(result);

У меня есть массив, как показано ниже:

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

Я попытался сгенерировать объект JSON:

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

Одним из решений, которое я могу придумать, является использование цикла FOR для его создания, но я уверен, что есть элегантные решения для этого. Любые предложения, пожалуйста, помогите мне.


Вы можете использовать метод Array.reduce чтобы сделать это

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


Используйте метод 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», вот ответ на основе 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>


Я не думаю, что есть элегантный способ, потому что вы используете знак "-" для разделения ключа и значения. Итак, лучший способ будет:

let element = {};
array.forEach(item => {
result = item.split("-"); 
element[result[0]] = result[1];
}






lodash