javascript ecma6将数组项转换为键值对的对象

时间:2018-03-02 20:20:31

标签: javascript arrays object ecmascript-6

我想将带有一些操作的数组转换为键和值的对象。 这是我的尝试:

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' }

4 个答案:

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