将对象数组转换为键值对对象
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 faster 比 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)
.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.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);
这可能是一个 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 faster 比 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)
.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.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);