【问题标题】:transform a js object into a new object with an other fotm将一个js对象转换成另一种形式的新对象
【发布时间】:2021-05-30 13:13:28
【问题描述】:

我想写一个函数来传递这个对象

const BEFORE = [
  {
    book_id: 1001,
    book_title: "L'enfant perdue",
    subgender: { Thriller: true },
  },
  {
    book_id: 1002,
    book_title: "La vérité sort de la bouche du cheval",
    subgender: { Thriller: true, Autobiographie: true },
  },
  {
    book_id: 1003,
    book_title: "Le pain nu",
    subgender: { Autobiographie: true },
  },
];

成为那样的人

const AFTER =  {
    Thriller: {
      subgender: "Thriller",
      books: [
        {
          book_id: 1001,
          book_title: "L'enfant perdue",
          subgender: { Thriller: true },
        },
        {
          book_id: 1002,
          book_title: "La vérité sort de la bouche du cheval",
          subgender: { Thriller: true, Autobiographie: true },
        },
      ],
      Autobiographie: {
        subgender: "Autobiographie",
        books: [
          {
            book_id: 1002,
            book_title: "La vérité sort de la bouche du cheval",
            subgender: { Thriller: true, Autobiographie: true },
          },
          {
            book_id: 1003,
            book_title: "Le pain nu",
            subgender: { Autobiographie: true },
          },
        ],
      },
    },
  },

我尝试使用 Array.reduce,但我不知道如何渲染它。 如果有人对此有任何后见之明 我想提取 subgender 作为 key 并添加 subgender 值,所以我可以使用 map 循环 subgender 或 reduce

谢谢

【问题讨论】:

  • 你能发布你尝试过的东西吗?

标签: javascript node.js arrays reactjs typescript


【解决方案1】:

这是一种相当标准的“分组”情况,可以通过reduce() 调用来解决。

sn-p 从数组中的对象的Object.keys() 中检索“subgenders” [原文如此],通过它们是否为true 过滤,检查累加器是否存在现有属性,否则声明为一个,然后将对象推入books 数组。

const input = [{ book_id: 1001, book_title: "L'enfant perdue", subgender: { Thriller: true }, }, { book_id: 1002, book_title: "La vérité sort de la bouche du cheval", subgender: { Thriller: true, Autobiographie: true }, }, { book_id: 1003, book_title: "Le pain nu", subgender: { Autobiographie: true }, },];

const result = input.reduce((a, o) => {
  const subgenders = Object.keys(o.subgender).filter(k => o.subgender[k]);

  subgenders.forEach(subgender => {
    a[subgender] = a[subgender] || { subgender, books: [] };
    // or using logical nullish assignment
    //a[subgender] ??= { subgender, books: [] };
    
    a[subgender].books.push({ ...o });
  })

  return a;
}, {});

console.log(JSON.stringify(result, null, 2));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2021-04-23
    • 2017-10-15
    • 1970-01-01
    • 2017-07-17
    • 2013-09-18
    • 2015-09-03
    相关资源
    最近更新 更多