【问题标题】:How to group an array of objects and mapping it to a different structure?如何对一组对象进行分组并将其映射到不同的结构?
【发布时间】:2021-12-27 03:57:43
【问题描述】:

这实际上是关于映射一组对象并将其分组。有没有办法在没有 lodash 的情况下以 javascript 方式转换这个数组

let fruits = [
  {
    id: 1,
    expired_date: "2021-11-30",
    name: "mango"
  },
  {
    id: 2,
    expired_date: "2021-11-20",
    name: "kiwi"
  },
  {
    id: 3,
    expired_date: "2021-11-20",
    name: "orange"
  },
  {
    id: 4,
    expired_date: "2021-11-10",
    name: "banana"
  },
  {
    id: 5,
    expired_date: "2021-11-10",
    name: "apple"
  }
]

分组到这样的东西? (按对象中的一个键分组,用2个键包裹在一个对象中,一个包含类别,另一个包含与组相关的对象)

let fruits = [
  {
    expired_date: "2021-11-30",
    rows: [
      {
        id: 1,
        expired_date: "2021-11-30",
        name: "mango"
      }
    ]
  },
  {
    expired_date: "2021-11-20",
    rows: [
      {
        id: 2,
        expired_date: "2021-11-20",
        name: "kiwi"
      },
      {
        id: 3,
        expired_date: "2021-11-20",
        name: "orange"
      }
    ]
  },
  {
    expired_date: "2021-11-10",
    rows: [
      {
        id: 4,
        expired_date: "2021-11-10",
        name: "banana"
      },
      {
        id: 5,
        expired_date: "2021-11-10",
        name: "apple"
      }
    ]
  }
]

我读过this question,但与预期的不太一样

【问题讨论】:

    标签: javascript arrays object mapping


    【解决方案1】:

    Array.reduce 应该可以工作

    const fruits = [  {    id: 1,    expired_date: "2021-11-30",    name: "mango"  },  {    id: 2,    expired_date: "2021-11-20",    name: "kiwi"  },  {    id: 3,    expired_date: "2021-11-20",    name: "orange"  },  {    id: 4,    expired_date: "2021-11-10",    name: "banana"  },  {    id: 5,    expired_date: "2021-11-10",    name: "apple"  }];
    
    const result = Object.values(fruits.reduce((acc, item) => {
        (acc[item.expired_date]??={expired_date: item.expired_date, rows: []}).rows.push(item);
        return acc;
    }, {}));
    
    console.log(result);

    修改后未分配??=,IE 不支持。

    const result = Object.values(fruits.reduce((acc, item) => {
      if (acc[item.expired_date]) {
        acc[item.expired_date].rows.push(item);
      } else {
        acc[item.expired_date] = {expired_date: item.expired_date, rows: [item]};
      }
      return acc;
    }, {}));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2022-11-24
    • 2020-07-12
    相关资源
    最近更新 更多