我想将带有一些操作的数组转换为键和值的对象。 这是我的尝试:
const config = [ 'key1=value1', 'key2=value2' ];
const configObject = config.map(c => {
var key = c.split('=')[0];
var value = c.split('=')[1];
return {key:value}
})
console.log('configObject', configObject) // [ { key: 'value1' }, { key: 'value2' } ]
我想获得一个键值对象,而不是没有任何旧学校 for loop 的数组。像这样:
{ key: 'value1' , key: 'value2' }
答案 0 :(得分:2)
使用函数reduce
。
const config = [ 'key1=value1', 'key2=value2' ];
const configObject = config.reduce((a, c) => {
var [key, value] = c.split('=');
return { ...a, ...{[key]: value} };
}, {});
console.log(configObject);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
您应该使用.reduce
代替
const config = [ 'key1=value1', 'key2=value2' ];
var data = config.reduce(
(acc, el) => {
acc[el.split("=")[0]] = el.split("=")[1];
return acc;
}, {}
);
console.log(data);
答案 2 :(得分:1)
你快到了。你正在寻找的成语是Object.assign(...array-of-objects)
:
config = [ 'key1=value1', 'key2=value2' ];
configObject = Object.assign(...config.map(c => {
var key = c.split('=')[0];
var value = c.split('=')[1];
return {[key]:value}
}))
console.log(configObject)
另请注意,它是[key]:
,而不仅仅是key:
。
更简洁但可读性更低的选项:
configObject = Object.assign(...config
.map(c => c.split('='))
.map(([k, v]) => ({[k]: v})));
答案 3 :(得分:1)
您可以在新对象中映射拆分的键/值对,并在单个对象中使用Object.assign
收集全部。
var array = ['key1=value1', 'key2=value2'],
object = Object.assign(...array.map(s => (([k, v]) => ({ [k]: v }))(s.split('='))));
console.log(object);