Сортировать массив объектов Childs в новый массив объектов - PullRequest
0 голосов
/ 28 января 2020

Я программирую небольшое приложение 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"
      }
    ]
  }
]

Как лучше всего это реализовать?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы можете сгруппировать предметы с помощью 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; }
0 голосов
/ 28 января 2020

Вам просто нужна комбинация map для создания нового массива, а затем sort на основе значения mainId

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
      }
    }
  }
]

const newArr = arr.map(obj => ({
  mainId: obj.parents.partentOfParent.mainId,
  parents: {
    id: obj.id,
    name: obj.name
  },
})).sort((a, b) => b - a);

console.log(newArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...