这可能是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箭头功能。另外,有人可以告诉我您是否认为以第一种或第二种格式操作此数据会更容易? 对于上下文,我正在尝试自学拓扑排序。
答案 0 :(得分: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);
答案 1 :(得分:3)
我会用Array.prototype.reduce()
来做到这一点,它比Object.fromEntries()
更加简洁,当然faster:
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%;}
答案 2 :(得分:0)
我不知道这是否更优雅,但我认为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);
答案 3 :(得分:0)
只需映射每个数组元素:
使用map()方法:
const newObj = {};
items.map( ( { name, value } ) => {
newObj[name] = value;
});
编辑:
使用forEach()方法:
const newObj =
((obj) => {
items.forEach(({ name, value }) => { obj [name] = value });
return obj;
})({});
答案 4 :(得分:0)
使用Object.values
和Object.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);