基本编程 - 多维对象的对象数组

Bob*_*Bob 3 javascript maps json javascript-objects

我已经坚持了几个小时.

我有一个对象列表:

const myCompanyList = [
    {name: 'coca-cola', size: 'big', color: 'red'},
    {name: 'my-cola', size: 'small', color: 'purple'},
    {name: 'pepsi', size: 'big', color: 'blue'}
];
Run Code Online (Sandbox Code Playgroud)

我需要把它变成这种格式:

myJson = {
    companies: {
        big: {
            coca-cola: {color: 'red'},
            pepsi: {color: 'blue'}
        },
        small: {
            my-cola: {color: 'purple'}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

wrapperObject = {};
innerObject = {};

for each object in myCompanyList {
    innerObject[object.size] = { object.name : {color: object.color}}

}
Run Code Online (Sandbox Code Playgroud)

但是对象[name]位会被覆盖.我怎么写这个,这样我就能在每个对象/地图级别动态获取名字?我是否需要制作另一个内部对象/地图来动态写入名称?

我已经尝试用Java写这个,但我最终得到了5维地图并且它没有用,所以我只是想知道是否有一些简单的我缺少 - 用Java,javascript或伪代码回答谢谢.

amr*_*ngh 7

您可以使用Array.reduce()创建地图,请尝试以下操作:

let myCompanyList = [{name: "coca-cola", size: "big", color: "red"}, {name: "my-cola", size: "small", color: "purple"},{name: "pepsi", size: "big", color:"blue"}];
                 
let result = {};
 
result.companies = myCompanyList.reduce((a,curr)=>{
  a[curr.size] = a[curr.size] || {};
  a[curr.size][curr.name] = {"color" : curr.color};
  return a;
},{});
 console.log(result);
Run Code Online (Sandbox Code Playgroud)