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]);

时间
膳食
金额
的长度总是相同的