Javascript 将对象数组缩减为键值映射
我有一个对象数组。我需要创建一个对象,以便根据id获取名称Javascript 将对象数组缩减为键值映射,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组。我需要创建一个对象,以便根据id获取名称 const drinks = [ { _id: "5fe40ad4d2e6e6de85c46a6c", name: "Americano", __v: 0 }, { _id: "5fe40ad4d2e6e6de85c46a6d", name: "Latte", __v: 0 }, { _id: "5fe40ad4d2e6e6de85c4
const drinks = [
{ _id: "5fe40ad4d2e6e6de85c46a6c", name: "Americano", __v: 0 },
{ _id: "5fe40ad4d2e6e6de85c46a6d", name: "Latte", __v: 0 },
{ _id: "5fe40ad4d2e6e6de85c46a6e", name: "Flat White", __v: 0 }
];
我尝试了这个几乎有效的方法:
console.log(drinks.reduce(
(accumulator, currentValue) =>
Object.assign(accumulator, accumulator[currentValue._id] = currentValue.name), {}));
然而,它输出:
Object {
0: "F", 1: "l", 2: "a", 3: "t", 4: " ", 5: "W", 6: "h", 7: "i", 8: "t", 9: "e",
5fe40ad4d2e6e6de85c46a6c: "Americano",
5fe40ad4d2e6e6de85c46a6d: "Latte",
5fe40ad4d2e6e6de85c46a6e: "Flat White"
}
我需要:
Object {
5fe40ad4d2e6e6de85c46a6c: "Americano",
5fe40ad4d2e6e6de85c46a6d: "Latte",
5fe40ad4d2e6e6de85c46a6e: "Flat White"
}
为什么我的函数还将其中一个值分解为字符?
const drinks=[{{u id:5fe40ad4d2e6e6de85c46a6c,name:Americano,{u v:0},
{id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0},
{{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0}];
const result=饮料。reduceac,curr=>{
acc[curr.\u id]=当前名称;
返回acc;
},{}
控制台。日志结果
const drinks=[{{u id:5fe40ad4d2e6e6de85c46a6c,name:Americano,{u v:0},
{id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0},
{{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0}];
const result=饮料。reduceac,curr=>{
acc[curr.\u id]=当前名称;
返回acc;
},{}
console.logresult这将起作用
drinks.map(({ _id, name }) => ({
[_id]: name
}))
这会奏效的
drinks.map(({ _id, name }) => ({
[_id]: name
}))
您可以将数组映射到一个包含项、键/值对的数组中,然后通过该数组创建最终对象 康斯特饮料=[ {id:5fe40ad4d2e6e6de85c46a6c,名称:Americano,{v:0}, {id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0}, {{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0} ] const result=Object.fromEntriesDrinds.map{u id,name}=> [[u id,name]
console.logresult您可以将数组映射到一个条目-键/值对数组中,然后运行该数组来创建最终的对象 康斯特饮料=[ {id:5fe40ad4d2e6e6de85c46a6c,名称:Americano,{v:0}, {id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0}, {{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0} ] const result=Object.fromEntriesDrinds.map{u id,name}=> [[u id,name] logresult只需传递要分配的对象{[currentValue.\u id]:currentValue.name},而不是分配累加器[currentValue.\u id]=currentValue.name 康斯特饮料=[ {id:5fe40ad4d2e6e6de85c46a6c,名称:Americano,{v:0}, {id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0}, {{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0} ]; 控制台 累加器,当前值=> Object.assignaccumulator,{[currentValue.\u id]:currentValue.name},{} 只需传递要赋值的对象{[currentValue.\u id]:currentValue.name},而不是赋值累加器[currentValue.\u id]=currentValue.name即可 康斯特饮料=[ {id:5fe40ad4d2e6e6de85c46a6c,名称:Americano,{v:0}, {id:5fe40ad4d2e6e6de85c46a6d,名称:拿铁,{U v:0}, {{u id:5fe40ad4d2e6e6de85c46a6e,名称:扁白色,{u v:0} ]; 控制台 累加器,当前值=>
Object.assignaccumulator,{[currentValue.\u id]:currentValue.name},{};这将输出一个对象数组,而不是单个对象…这将输出一个对象数组,而不是单个对象…谢谢,这与我试图实现的最接近。这与我试图实现的最接近。解释发生了什么!谢谢你解释发生了什么事!