Javascript 展平嵌套数组
我使用下划线,我有一个对象Javascript 展平嵌套数组,javascript,arrays,json,underscore.js,Javascript,Arrays,Json,Underscore.js,我使用下划线,我有一个对象 [{ name: "aaa", date: "2020", time: [20, 10, 30], meal: ["before", "after", "before"], amount: [1, 2, 3] }, { name: "bbb", date: "2021", time: [200, 1
[{
name: "aaa",
date: "2020",
time: [20, 10, 30],
meal: ["before", "after", "before"],
amount: [1, 2, 3]
}, {
name: "bbb",
date: "2021",
time: [200, 100, 300],
meal: ["before", "after", "before"],
amount: [10, 20, 30]
}]
我想重复函数中的每一项,时间/膳食/数量如下:
[{
name: "aaa",
date: "2020",
time: 20,
meal: "before",
amount: 1
},{
name: "aaa",
date: "2020",
time: 10,
meal: "after",
amount: 2
},{
name: "aaa",
date: "2020",
time: 30,
meal: "before",
amount: 3
}, {
name: "bbb",
date: "2021",
time: 200,
meal: "before",
amount: 10
},{
name: "bbb",
date: "2021",
time: 100,
meal: "after",
amount: 20
},{
name: "bbb",
date: "2021",
time: 300,
meal: "before",
amount: 30
}]
然后我会按时间和食物把他们分组。
我尝试了很多方法,但是如果
时间长度
,用餐时间
和数量
总是相同的,我想我不会有结果,你可以使用它们创建一个具有相同属性的新对象,并将它们平放到一个新数组中
const data=[{name:“aaa”,date:“2020”,time:[20,10,30],餐:[“before”,“before”,“before”,“before”,“amount:[1,2,3]},{name:“bbb”,date:“2021”,time:[200100300],餐:[“before”,“before”,“before”],amount:[10,20,30]};
const combos=data.flatMap({time,mean,amount,…rest})=>{
返回时间.map((num,index)=>({
休息
时间:num,
膳食:膳食[索引],
金额:金额[索引],
}));
});
console.log(组合)代码>
.as控制台包装{min height:100%;}
如果假设数组位于变量x中,您只需执行以下操作,无需下划线:
var y = [];
x.forEach(z => {
z.meal.forEach((val, index) => {
y.push({
name: z.name,
date: z.date,
time: z.time[index],
meal: val,
amount: z.amount[index]
});
});
});
y
将包含新数组。
如果您想按某个字段分组,或者执行其他聚合,并且您知道SQL,那么一个有趣的方法就是使用。包括/要求它,然后您可以执行以下操作:
alasql('SELECT name, date, time, meal, SUM(amount) FROM ? GROUP BY time, meal',[y]);
时间
、膳食
和金额
的长度总是相同的