【问题标题】:How to merge array of objects element in javascript using common property如何使用公共属性在javascript中合并对象元素数组
【发布时间】:2021-08-17 14:10:54
【问题描述】:
     const data = [
  {
    date: "2021-05-17",
    meals: [{ name: "jon", breakFast: 1, lunch: 2, dinner: 2 }],
  },
  {
    date: "2021-05-17",
    meals: [{ name: "Bob", breakFast: 3, lunch: 4, dinner: 5 }],
  },
  {
    date: "2021-05-18",
    meals: [{ name: "Boo", breakFast: 3, lunch: 4, dinner: 5 }],
  },
];

我有一个对象数组。有不同的日期和膳食(对象数组)。是否可以同时显示所有相同日期的餐食?

喜欢这个。

  const data = [
  {
    date: "2021-05-17",
    meals: [
      { name: "jon", breakFast: 1, lunch: 2, dinner: 2 },
      { name: "Bob", breakFast: 3, lunch: 4, dinner: 5 },
    ],
  },
  {
    date: "2021-05-18",
    meals: [{ name: "Boo", breakFast: 3, lunch: 4, dinner: 5 }],
  },
];

【问题讨论】:

标签: javascript arrays object merge


【解决方案1】:

const data = [{
        date: "2021-05-17",
        meals: [{
            name: "jon",
            breakFast: 1,
            lunch: 2,
            dinner: 2
        }],
    },
    {
        date: "2021-05-17",
        meals: [{
            name: "Bob",
            breakFast: 3,
            lunch: 4,
            dinner: 5
        }],
    },
    {
        date: "2021-05-18",
        meals: [{
            name: "Boo",
            breakFast: 3,
            lunch: 4,
            dinner: 5
        }],
    },
];

let res = {};
data.forEach(x => {
    if (!res[x.date]) {
        res[x.date] = {
            ...x
        };
    } else {
        res[x.date].meals = [...res[x.date].meals, ...x.meals];

    }
});

console.log(Object.values(res));

【讨论】:

    【解决方案2】:

    您需要遍历所有data 并搜索result 数组是否包含日期。如果没有,请使用日期创建新项目。然后把饭菜数据推进去。

    const data = [{date: "2021-05-17",meals: [{ name: "jon", breakFast: 1, lunch: 2, dinner: 2 }],},{date: "2021-05-17",meals: [{ name: "Bob", breakFast: 3, lunch: 4, dinner: 5 }],},{date: "2021-05-18",meals: [{ name: "Boo", breakFast: 3, lunch: 4, dinner: 5 }],},];
    
    const result = [];
    data.forEach(d => {
      let i = result.findIndex(e => e.date === d.date) + 1 
      || result.push({date: d.date, meals: []});
      result[i - 1].meals.push(...d.meals);
    })
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2019-06-11
      • 1970-01-01
      相关资源
      最近更新 更多