我有一个如下所示的数组:
["gender-m", "age-20", "city-london", "lang-en", "support-home"]
我尝试生成一个 JSON 对象:
{"gender":"m", "age":"20", "city":"london", "lang":"en", "support":"home"}
我能想到的一种解决方案是使用 FOR 循环来实现它,但我相信有优雅的解决方案。任何建议,请帮助我。
您可以使用拆分的键/值对进行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);
我认为没有一种优雅的方法,因为您使用"-"符号来分隔键和值。因此,最好的方法是:
let element = {};
array.forEach(item => {
result = item.split("-");
element[result[0]] = result[1];
}
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]}
}, {})
它可以通过拆分和映射来解决,对于数组中的每个项目,将-替换为:使用拆分,它将变成一个键值,然后将这些值分配给要返回的对象。
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(;
由于您最初将其标记为"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>
使用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;}, {});
您可以使用Array.reduce
方法来执行此操作
["gender-m", "age-20", "city-london", "lang-en", "support-home"].reduce((rs, el) => {rs[el.split('-')[0]] = el.split('-')[1]; return rs;}, {});