首页 > 解决方案 > 按顺序将对象推入数组

问题描述

在下面的 JSON 结构中,

[
  {
    "type": "heading-1",
    "text": "A title",
  },
  {
    "type": "ordered-list-item",
    "text": "Ordered Item A",
  },
  {
    "type": "unordered-list-item",
    "text": "Ordered Item B",
  },
  {
    "type": "heading-2",
    "text": "A title",
  },
  {
    "type": "ordered-list-item",
    "text": "Ordered Item A",
  },
  {
    "type": "unordered-list-item",
    "text": "Ordered Item B",
  }
];

我需要将所有作为ordered-list-item&的类型移动unordered-list-item到新对象中。像下面这样的东西,

  {
    "type": 'list',
    "items": [
      {
        "type": "ordered-list-item",
        "text": "Ordered Item A",
      },
      {
        "type": "unordered-list-item",
        "text": "Ordered Item B",
      }
    ]
  }

最重要的是,我需要维持秩序

例如,ordered-list-item&unordered-list-item应该被推入新对象,直到type匹配。

所以有了上面的Json结构,下面是预期的输出

[
  {
    "type": "heading-1",
    "text": "A title",
  },
  {
    "type": "heading-2",
    "text": "A title",
  },
  {
    "type": 'list',
    "items": [
      {
        "type": "ordered-list-item",
        "text": "Ordered Item A",
      },
      {
        "type": "unordered-list-item",
        "text": "Ordered Item B",
      }
    ]
  },
  {
    "type": "heading-1",
    "text": "A title",
  },
  {
    "type": 'list',
    "items": [
      {
        "type": "ordered-list-item",
        "text": "Ordered Item A",
      },
      {
        "type": "unordered-list-item",
        "text": "Ordered Item B",
      }
    ]
  },
]

如何才能做到这一点 ?

标签: javascripttypescript

解决方案


您可以在任何数组上使用 array.filter 来创建一个匹配条件的新数组(以相同的顺序)

const orderedList = yourArray.filter(a => a.type === 'ordered-list-item');
const unOrderedList = yourArray.filter(a => a.type === 'unordered-list-item');

然后只需使用新的过滤数组构建新的 json 对象。


推荐阅读