Javascript 高效地提取未知数据、分离并以特定格式存储?

Javascript 高效地提取未知数据、分离并以特定格式存储?,javascript,Javascript,我有需要以特定方式进行排序、筛选和存储的数据。我会通过展示来解释。以下是数据: var pieData, cakeData, icecreamData; var desserts = [ { pies: [ { name: "blueberry", count: 3 }, { name: "pumpkin

我有需要以特定方式进行排序、筛选和存储的数据。我会通过展示来解释。以下是数据:

var pieData, cakeData, icecreamData;

var desserts = [
    {
        pies: [
            {
                name: "blueberry",
                count: 3
            },
            {
                name: "pumpkin",
                count: 6
            },
            {
                name: "apple",
                count: 9
            }
        ],
        cakes: [
            {
                name: "chocolate",
                count: 3
            },
            {
            name: "foam",
            count: 6
            },
            {
                name: "wedding",
                count: 9
            }
        ],
        icecream: [
            {
                name: "chocolate",
                count: 3
            },
            {
                name: "strawberry",
                count: 6
            },
            {
                name: "mint-chip",
                count: 9
            }
        ],
        date: "2016-01-06T00:00:00"
    },
    {
        pies: [
            {
                name: "blueberry",
                count: 2
            },
            {
                name: "pumpkin",
                count: 4
            },
            {
                name: "apple",
                count: 6
            }
        ],
        cakes: [
            {
                name: "chocolate",
                count: 2
            },
            {
                name: "foam",
                count: 4
            },
            {
                name: "wedding",
                count: 6
            }
        ],
        icecream: [
            {
                name: "chocolate",
                count: 2
            },
            {
                name: "strawberry",
                count: 4
            },
            {
                name: "mint-chip",
                count: 6
            }
        ],
        date: "2016-01-07T00:00:00"
    },
    {
        pies: [
            {
                name: "blueberry",
                count: 4
            },
            {
                name: "pumpkin",
                count: 8
            },
            {
                name: "apple",
                count: 12
            }
        ],
        cakes: [
            {
                name: "chocolate",
                count: 4
            },
            {
                name: "foam",
                count: 8
            },
            {
                name: "wedding",
                count: 12
            }
        ],
        icecream: [
            {
                name: "chocolate",
                count: 4
            },
            {
                name: "strawberry",
                count: 8
            },
            {
                name: "mint-chip",
                count: 12
            }
        ],
        date: "2016-01-08T00:00:00"
    }
];
所以我有我的数据。这些数据基本上是指馅饼、蛋糕和冰淇淋的类型,它们的数量、名称和数量可能会有所不同。甜点中的每个对象都是一天,日期是最后一个属性。我会直接说我想从中得到什么,然后再进一步解释。以下是我需要从中得到的:

pieData = [
    {
        name: "blueberry",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [3, 2, 4]
    },
    {
        name: "pumpkin",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [6, 4, 8]
    },
    {
        name: "apple",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [9, 6, 12]
    }
];
cakeData = [
    {
        name: "chocolate",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [3, 2, 4]
    },
    {
        name: "foam",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [6, 4, 8]
    },
    {
        name: "wedding",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [9, 6, 12]
    }
];
icecreamData = [
    {
        name: "chocolate",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [3, 2, 4]
    },
    {
        name: "strawberry",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [6, 4, 8]
    },
    {
        name: "mint-chip",
        dates: ["2016-01-06T00:00:00", "2016-01-07T00:00:00", "2016-01-08T00:00:00"],
        counts: [9, 6, 12]
    }
];
因此,我需要将desserts变量传递给一个函数,并让它将在原始数据顶部声明的pieData、cakeData和icecreamData变量设置为我在第二段代码中显示的对象数组

需要注意的几点:

  • 在输出数据中,这些值对应于原始数据中最初指定的天数。例如,pieData[0]。日期[0]对应于pieData[0]。按原始数据中显示的[0]计数

  • 每种甜点可能有无限种,也可能没有。这意味着原始数据中的“饼图”数组中可能有10个不同的对象,或者没有。但不管馅饼、蛋糕和冰淇淋是空的还是里面有一千个东西,它们都会出现

  • 我不知道每种甜点都会有哪一种。它可能是任何东西。因此,馅饼可以被命名为“南瓜”,也可以被命名为“电池酸”


  • 我能想到的唯一解决方案是执行多个循环和嵌套循环,而且总体上代码太多。我知道必须有一些有效的魔法才能正确完成这项工作。

    这会将其转换为您想要的格式

    var-pieData=[]、cakeData=[]、icecreamData=[];
    var甜点=[
    {
    馅饼:[
    {
    名称:“蓝莓”,
    计数:3
    },
    {
    名字:“南瓜”,
    计数:6
    },
    {
    名称:“苹果”,
    计数:9
    }
    ],
    蛋糕:[
    {
    名称:“巧克力”,
    计数:3
    },
    {
    名称:“泡沫”,
    计数:6
    },
    {
    名字:“婚礼”,
    计数:9
    }
    ],
    冰淇淋:[
    {
    名称:“巧克力”,
    计数:3
    },
    {
    名称:“草莓”,
    计数:6
    },
    {
    名称:“薄荷片”,
    计数:9
    }
    ],
    日期:“2016-01-06T00:00:00”
    },
    {
    馅饼:[
    {
    名称:“蓝莓”,
    计数:2
    },
    {
    名字:“南瓜”,
    计数:4
    },
    {
    名称:“苹果”,
    计数:6
    }
    ],
    蛋糕:[
    {
    名称:“巧克力”,
    计数:2
    },
    {
    名称:“泡沫”,
    计数:4
    },
    {
    名字:“婚礼”,
    计数:6
    }
    ],
    冰淇淋:[
    {
    名称:“巧克力”,
    计数:2
    },
    {
    名称:“草莓”,
    计数:4
    },
    {
    名称:“薄荷片”,
    计数:6
    }
    ],
    日期:“2016-01-07T00:00:00”
    },
    {
    馅饼:[
    {
    名称:“蓝莓”,
    计数:4
    },
    {
    名字:“南瓜”,
    计数:8
    },
    {
    名称:“苹果”,
    计数:12
    }
    ],
    蛋糕:[
    {
    名称:“巧克力”,
    计数:4
    },
    {
    名称:“泡沫”,
    计数:8
    },
    {
    名字:“婚礼”,
    计数:12
    }
    ],
    冰淇淋:[
    {
    名称:“巧克力”,
    计数:4
    },
    {
    名称:“草莓”,
    计数:8
    },
    {
    名称:“薄荷片”,
    计数:12
    }
    ],
    日期:“2016-01-08T00:00:00”
    }
    ];
    对于(变量i=0;i
    这会将其转换为您想要的格式

    var-pieData=[]、cakeData=[]、icecreamData=[];
    var甜点=[
    {
    馅饼:[
    {
    名称:“蓝莓”,
    计数:3
    },
    {
    名字:“南瓜”,
    计数:6
    },
    {
    名称:“苹果”,
    计数:9
    }
    ],
    蛋糕:[
    {
    名称:“巧克力”,
    计数:3
    },
    {
    名称:“泡沫”,
    计数:6
    },
    {
    名字:“婚礼”,
    计数:9
    }
    ],
    
    var pieData = [], cakeData = [], icecreamData = [];
    
    var desserts = [
        {
            pies: [
                {
                    name: "blueberry",
                    count: 3
                },
                {
                    name: "pumpkin",
                    count: 6
                },
                {
                    name: "apple",
                    count: 9
                }
            ],
            cakes: [
                {
                    name: "chocolate",
                    count: 3
                },
                {
                name: "foam",
                count: 6
                },
                {
                    name: "wedding",
                    count: 9
                }
            ],
            icecream: [
                {
                    name: "chocolate",
                    count: 3
                },
                {
                    name: "strawberry",
                    count: 6
                },
                {
                    name: "mint-chip",
                    count: 9
                }
            ],
            date: "2016-01-06T00:00:00"
        },
        {
            pies: [
                {
                    name: "blueberry",
                    count: 2
                },
                {
                    name: "pumpkin",
                    count: 4
                },
                {
                    name: "apple",
                    count: 6
                }
            ],
            cakes: [
                {
                    name: "chocolate",
                    count: 2
                },
                {
                    name: "foam",
                    count: 4
                },
                {
                    name: "wedding",
                    count: 6
                }
            ],
            icecream: [
                {
                    name: "chocolate",
                    count: 2
                },
                {
                    name: "strawberry",
                    count: 4
                },
                {
                    name: "mint-chip",
                    count: 6
                }
            ],
            date: "2016-01-07T00:00:00"
        },
        {
            pies: [
                {
                    name: "blueberry",
                    count: 4
                },
                {
                    name: "pumpkin",
                    count: 8
                },
                {
                    name: "apple",
                    count: 12
                }
            ],
            cakes: [
                {
                    name: "chocolate",
                    count: 4
                },
                {
                    name: "foam",
                    count: 8
                },
                {
                    name: "wedding",
                    count: 12
                }
            ],
            icecream: [
                {
                    name: "chocolate",
                    count: 4
                },
                {
                    name: "strawberry",
                    count: 8
                },
                {
                    name: "mint-chip",
                    count: 12
                }
            ],
            date: "2016-01-08T00:00:00"
        }
    ];
    
    for(var i = 0; i < desserts.length; i++) {
        var d = desserts[i].date;
      desserts[i].pies.length && save(pieData, desserts[i].pies, d);
      desserts[i].cakes.length && save(cakeData, desserts[i].cakes, d);
      desserts[i].icecream.length && save(icecreamData, desserts[i].icecream, d);
    }
    
    function save(destination, items, d) {
        for(var i = 0; i < items.length; i++) {
        var name = items[i].name;
        var count = items[i].count;
        if(destination[name] === undefined) { destination[name] = {name:'',dates:[],counts:[]}; }
        destination[name].name = name;
        destination[name].dates.push(d);
        destination[name].counts.push(count);
      }
    }
    console.log(pieData);
    console.log(cakeData);
    console.log(icecreamData);