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变量设置为我在第二段代码中显示的对象数组
需要注意的几点:
我能想到的唯一解决方案是执行多个循环和嵌套循环,而且总体上代码太多。我知道必须有一些有效的魔法才能正确完成这项工作。这会将其转换为您想要的格式
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);