@campus1

Как отфильтровать данные?

Всем привет.
Такая ситуация:
Есть объект
{
  objectKey: {
    package_id: 1
  },
  objectKey2: {
    package_id: 3
  }
}


У меня есть массивы объектов для пакетов и objectKey

// Объект данных
[{key: "objectKey", testing: true, name: "name1"}, {key: "objectKey2", testing: false, name: "name2"}, {key: "objectKey4", testing: false, name: "name4"}, {key: "objectKey5", testing: false, name: "name5"}]


// Объект пакетов
[{title: "packageKey", id: 1, areas: []}, {title: "packageKey2", id: 2, areas: []}, {title: "packageKey3", id: 3, areas: []}, {title: "packageKey4", id: 4, areas: []}]


В результате мне нужно нужно найти (отфильтровать) эти 2 общих массива, по тому начальному объекту и в результате получить
//такой массив объектов
[{objDataTitle: "name1", packageName: "packageKey"}, {objDataTitle: "objectKey2", packageName: "packageKey3"}]


Вот так начал делать, но дальше не знаю как создать общий результующий объект
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result = Object.entries(commonObj).map(([ k, v ]) => ({
  objDataName: (objectData.find(n => n.key === k) || {}).name || null,
  packageName: (packageData.find(n => n.id === v.package_id) || {}).title || null,
}));

или

const arrToObj = (arr, key, val) =>
  arr.reduce((acc, n) => (acc[n[key]] = n[val], acc), {});

const objects = arrToObj(objectData, 'key', 'name');
const packages = arrToObj(packageData, 'id', 'title');

const result = Object.entries(commonObj).map(n => ({
  objDataName: objects[n[0]] || null,
  packageName: packages[n[1].package_id] || null,
}));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы