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

Convert array of objects to object of key-value pairs

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

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

所以这个:

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

对此:

var items = {
    'hello': ['one', 'two'],
    'hi': ['one', 'two', 'three']
}

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

const newObj = {};
items.forEach((item) => {
  newObj[item.name] = item.value;
});

我想优先使用 ES6 箭头函数。另外,如果您认为以第一种或第二种格式处理这些数据会更容易,有人能告诉我吗? 对于上下文,我正在尝试自学拓扑排序。

更简洁的方法是使用 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);

我会用 Array.prototype.reduce(), it is even more concise and certainly fasterObject.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)
.as-console-wrapper{min-height:100%;}

我不知道这是否更优雅,但我认为reduce在这里有意义。

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


const newObj = items.reduce((c, {value, name}) => {
  c[name] = value;
  return c;
}, {});

console.log(newObj);

简单地通过映射每个数组元素:

使用 map() 方法:

const newObj = {};
items.map( ( { name, value } ) => {
    newObj[name] = value;
});

编辑:

使用 forEach() 方法:

const newObj =
((obj) => {
    items.forEach(({ name, value }) => { obj [name] = value });
    return obj;
 })({});

使用Object.valuesObject.fromEntries简化为一行

Object.fromEntries(items.map(item => Object.values(item)))

var items = [
  {
    name: "hello",
    value: ["one", "two"]
  },
  {
    name: "hi",
    value: ["one", "two", "three"]
  }
];

const res = Object.fromEntries(items.map(item => Object.values(item)));

console.log(res);