Javascript JS将数组转换为具有属性键/值的对象

Javascript JS将数组转换为具有属性键/值的对象,javascript,Javascript,我在编码时发现了这个问题,目标是将items数组变成一个具有属性key/value的对象,对多次出现的项进行计数,如下所示: { cookie:{ MILK: 1, CHOCOLATE: 2, DELUXE: 1 }, bread:{ BIG: 2 }, beer:{ NEW: 1, OLD: 1 } } 我试过下面的代码 const items = [ "cookie-MILK", "

我在编码时发现了这个问题,目标是将items数组变成一个具有属性key/value的对象,对多次出现的项进行计数,如下所示:

{
  cookie:{
    MILK: 1,
    CHOCOLATE: 2,
    DELUXE: 1
  },
  bread:{
    BIG: 2
  },
  beer:{
    NEW: 1,
    OLD: 1
  }
}
我试过下面的代码

const items = [
  "cookie-MILK",
  "cookie-CHOCOLATE",
  "cookie-CHOCOLATE",
  "cookie-DELUXE",
  "bread-BIG",
  "bread-BIG",
  "beer-NEW",
  "beer-OLD"
]
let newArray = [];

items.forEach((e) => {
  let splitArray = e.split("-");
  newArray.push([splitArray[0], splitArray[1]]);
});


let result = newArray.reduce((acc, val) => {
  if (!acc[val[0]] && !acc[val[1]] ) acc[val[0]] = {
     [val[1]]: 1,
  };
   else acc[val[0]][val[1]]++;
  return acc;
}, {});
但是这个代码返回它,我不知道如何解决这个问题

{
  cookie:{
    MILK: 1,
    CHOCOLATE: NaN,
    DELUXE: NaN
  },
  bread:{
    BIG: 2
  },
  beer:{
    NEW: 1,
    OLD:  NaN
  }
}
您可以选择一个值来指定对象,也可以选择零并递增该值

const
商品=[“曲奇牛奶”、“曲奇巧克力”、“曲奇巧克力”、“曲奇豪华”、“大面包”、“大面包”、“新啤酒”、“旧啤酒”],
结果=项目。减少((acc,val)=>{
常量[左,右]=值拆分(“-”);
(acc[左]??={})[右]??=0;
acc[左][右]++;
返回acc;
}, {});
控制台日志(结果)您可以使用a来指定对象,也可以使用零并递增该值

const
商品=[“曲奇牛奶”、“曲奇巧克力”、“曲奇巧克力”、“曲奇豪华”、“大面包”、“大面包”、“新啤酒”、“旧啤酒”],
结果=项目。减少((acc,val)=>{
常量[左,右]=值拆分(“-”);
(acc[左]??={})[右]??=0;
acc[左][右]++;
返回acc;
}, {});

控制台日志(结果)我认为这是更好的解决方案:

const项=[
“饼干牛奶”,
“饼干巧克力”,
“饼干巧克力”,
“饼干豪华”,
“大面包”,
“大面包”,
“啤酒新”,
“老啤酒”
];
设res={};
items.forEach(item=>{
让itemParsed=item.split(“-”);
if(资源类型[itemParsed[0]]=“未定义”)
res[itemParsed[0]]={}
if(类型res[itemParsed[0]][itemParsed[1]]==“未定义”)
res[itemParsed[0]][itemParsed[1]]=0;
res[itemParsed[0]][itemParsed[1]]+%;
})

console.log(res)
我认为这是更好的解决方案:

const项=[
“饼干牛奶”,
“饼干巧克力”,
“饼干巧克力”,
“饼干豪华”,
“大面包”,
“大面包”,
“啤酒新”,
“老啤酒”
];
设res={};
items.forEach(item=>{
让itemParsed=item.split(“-”);
if(资源类型[itemParsed[0]]=“未定义”)
res[itemParsed[0]]={}
if(类型res[itemParsed[0]][itemParsed[1]]==“未定义”)
res[itemParsed[0]][itemParsed[1]]=0;
res[itemParsed[0]][itemParsed[1]]+%;
})
console.log(res)