将对象数组转换为键值对对象

bsp*_*ckl 5 javascript arrays key-value topological-sort ecmascript-6

这可能是一个 2 班轮,但由于某种原因,我碰壁了。

我想将对象数组转换为键值对对象。

所以这:

var items = [
    {
      name: 'hello',
      value: ['one', 'two']
    },
    {
      name: 'hi',
      value: ['one', 'two', 'three']
    }
]
Run Code Online (Sandbox Code Playgroud)

对此:

var items = {
    'hello': ['one', 'two'],
    'hi': ['one', 'two', 'three']
}
Run Code Online (Sandbox Code Playgroud)

这真的是最优雅的方式吗?

const newObj = {};
items.forEach((item) => {
  newObj[item.name] = item.value;
});
Run Code Online (Sandbox Code Playgroud)

我想最好使用 ES6 箭头函数。另外,有人可以告诉我您是否认为以第一种或第二种格式操作这些数据会更容易吗?对于上下文,我正在尝试自学拓扑排序。

Cer*_*nce 5

更简洁的方法是使用Object.fromEntries

var items = [
    {
      name: 'hello',
      value: ['one', 'two']
    },
    {
      name: 'hi',
      value: ['one', 'two', 'three']
    }
];
const newObj = Object.fromEntries(
  items.map(({ name, value }) => [name, value])
);
console.log(newObj);
Run Code Online (Sandbox Code Playgroud)


Yev*_*kov 5

我会做,与Array.prototype.reduce(),则更加简洁,当然更快Object.fromEntries()

const items = [{name:'hello',value:['one','two']},{name:'hi',value:['one','two','three']}], 

result = items.reduce((r,{name,value}) => (r[name]=value,r), {})

console.log(result)
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper{min-height:100%;}
Run Code Online (Sandbox Code Playgroud)