javascript - 将对象子数组排序到包含对象的新数组

标签 javascript arrays object

我正在编写一个小型 vue.js 应用程序,需要将数组转换为新数组并对它们进行排序。 我从后端服务器获取的对象数组如下所示:

var arr =
[
  {
    "id": 1,
    "name": "Name1",
    "parents": {
      "someOtherTings": "Test",
      "partentOfParent": {
        "mainId": 10
      }
    }
  },
  {
    "id": 2,
    "name": "Name2",
    "parents": {
      "someOtherTings": "Test",
      "partentOfParent": {
        "mainId": 11
      }
    }
  },
  {
    "id": 3,
    "name": "Name3",
    "parents": {
      "someOtherTings": "Test",
      "partentOfParent": {
        "mainId": 10
      }
    }
  }
]

    console.log(arr)

但是我需要一个新的数组,其排序如下:

var newArr =
[
  {
    "mainId": 10,
    "parents": {
      "id": 1,
      "name": "Name1"
    }
  },
  {
    "mainId": 11,
    "parents": [
      {
        "id": 2,
        "name": "Name2"
      },
      {
        "id": 3,
        "name": "Name3"
      }
    ]
  }
]

实现此目的的最佳方法是什么?

最佳答案

您可以在Map的帮助下对项目进行分组。 .

var array = [{ id: 1, name: "Name1", parents: { someOtherTings: "Test", partentOfParent: { mainId: 10 } } }, { id: 2, name: "Name2", parents: { someOtherTings: "Test", partentOfParent: { mainId: 11 } } }, { id: 3, name: "Name3", parents: { someOtherTings: "Test", partentOfParent: { mainId: 10 } } }],
    result = Array.from(
        array.reduce(
            (m, { id, name, parents: { partentOfParent: { mainId } } }) =>
                m.set(mainId, [...(m.get(mainId) || []), { id, name }]),
            new Map
        ),
        ([mainId, parents]) => ({ mainId, parents })
    );

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

关于javascript - 将对象子数组排序到包含对象的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953606/

相关文章:

c++ - C++ 中的循环指针

python-3.x - 为什么我不能在 pydantic 中创建独立的 HttpURL 对象?

javascript - 比较 JavaScript 中的函数参数

java - 如何仅使用 Scanner 读取文件并将每个句子存储在 arrayList 中?

javascript - 过滤数组值 - return 语句不会结束函数

arrays - 田口方法编程示例

java - 使用数组按姓名和分数对学生进行排序

javascript - 从 Javascript/typescript 对象的非空属性创建一个数组

JSON 的 JavaScript/Dojo 模板

javascript - 调用在 Jquery 中不作为链式函数工作