Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象数组缩减为键值映射_Javascript_Arrays_Object - Fatal编程技术网

Javascript 将对象数组缩减为键值映射

Javascript 将对象数组缩减为键值映射,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组。我需要创建一个对象,以便根据id获取名称 const drinks = [ { _id: "5fe40ad4d2e6e6de85c46a6c", name: "Americano", __v: 0 }, { _id: "5fe40ad4d2e6e6de85c46a6d", name: "Latte", __v: 0 }, { _id: "5fe40ad4d2e6e6de85c4

我有一个对象数组。我需要创建一个对象,以便根据id获取名称

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},{};这将输出一个对象数组,而不是单个对象…这将输出一个对象数组,而不是单个对象…谢谢,这与我试图实现的最接近。这与我试图实现的最接近。解释发生了什么!谢谢你解释发生了什么事!