Javascript 从平面对象创建关键点:值对象

Javascript 从平面对象创建关键点:值对象,javascript,api,ecmascript-6,Javascript,Api,Ecmascript 6,我正在使用Javascript从API获取数据。 我得到以下对象列表 [ {name: 'Cat', value: 2, extra: 'data'}, {name: 'Dog', value: 3, extra: 'data'} ] 我正在努力达到下面的形式 [ cat: {value: 2}, dog: {value: 3} ] 我目前正在尝试使用map,但我不知道关键部分在哪里。 一个普通的旧for循环就可以做到这一点。对于函数式编程,您必须使用redu

我正在使用Javascript从API获取数据。 我得到以下对象列表

[
    {name: 'Cat', value: 2, extra: 'data'},
    {name: 'Dog', value: 3, extra: 'data'}
]
我正在努力达到下面的形式

[
    cat: {value: 2},
    dog: {value: 3}
]
我目前正在尝试使用map,但我不知道关键部分在哪里。 一个普通的旧for循环就可以做到这一点。对于函数式编程,您必须使用
reduce
将其归结为一个对象,
map
始终返回一个数组

const result = array.reduce((res, {name, value}) => ({ ...res, [name]: {value}}), {});
一个普通的旧for循环就可以做到这一点。对于函数式编程,您必须使用
reduce
将其归结为一个对象,
map
始终返回一个数组

const result = array.reduce((res, {name, value}) => ({ ...res, [name]: {value}}), {});
var数据=[
{name:'Cat',value1:2,value2:3},
{name:'Dog',value1:3,value2:4}
]
var结果=data.map((项目)=>{
var name=item.name
删除item.name
//如果要修改某些属性
item.value1=item.value1+“$”
返回{[name]:{…item}
})
console.log(结果)
var数据=[
{name:'Cat',value1:2,value2:3},
{name:'Dog',value1:3,value2:4}
]
var结果=data.map((项目)=>{
var name=item.name
删除item.name
//如果要修改某些属性
item.value1=item.value1+“$”
返回{[name]:{…item}
})

console.log(result)
您可以使用
Object.assign()
map()
方法返回对象作为结果

const data=[{name:'Cat',value:2},{name:'Dog',value:3}]
const result=Object.assign({},…data.map(({name,value})=>({[name]:{value})))

console.log(result)
您可以使用
Object.assign()
map()
方法返回对象作为结果

const data=[{name:'Cat',value:2},{name:'Dog',value:3}]
const result=Object.assign({},…data.map(({name,value})=>({[name]:{value})))

console.log(result)
谢谢您的回答,最后一行出现语法错误。@notflip-oops,缺少一个括号:)谢谢您的回答,最后一行出现语法错误。@notflip-oops,缺少一个括号:)谢谢!我更喜欢你之前的答案,我不能在其中一个属性中添加字符串,例如,如果我想在cat的2值后面添加$符号。是的,我认为这个版本会更通用。是否仍然可以使用这个版本修改某些参数?谢谢!我更喜欢你之前的答案,我不能向其中一个属性添加字符串,例如,如果我想在cat的2值后面添加$符号。是的,我认为这个版本会更通用。是否仍然可以使用这个版本修改某些参数?
const result = array.reduce((res, {name, value}) => ({ ...res, [name]: {value}}), {});