Фильтровать объект на основе значений в массиве - PullRequest
0 голосов
/ 01 декабря 2018

Я столкнулся с небольшой проблемой, которую я не могу найти или найти решение в Интернете, по крайней мере, о которой я знаю.Я хочу отфильтровать объект в JavaScript, основываясь на неопределенном количестве значений в массиве.У меня есть такой объект:

categories = { "category1: {"_id": "1234"}, "category2: {"_id": "4567"}, ... };

У меня также есть массив, содержащий значения идентификаторов, например:

catArray = ["1234", "4567", ... ]

Теперь я хочу отфильтровать все категории из категории.Объект, соответствующий идентификаторам из массива.Мне удалось отфильтровать категорию для одного значения массива, но не для всех.Это работает так:

const categoriesFilter = categories.filter(cat => {
        return cat._id == catArray[0];
});

Пока это работает.Но теперь я хочу сопоставить категории из всех возможных значений ID из массива.Я пытался сделать это с помощью цикла for, но это не сработало.Любая идея?Заранее большое спасибо.

Ответы [ 4 ]

0 голосов
/ 01 декабря 2018
const categories = { category1: {"id": "1234"}, category2: {"id": "4567"}, category3: {"id": "123"}};
const catArray = ["1234", "4567" ]
const checkIfArrIncludes = (id) => catArray.includes(id);
const matchedCats = Object.values(categories).filter(cat => (checkIfArrIncludes(cat.id) ? cat : 0));
0 голосов
/ 01 декабря 2018

Можно сначала создать один объект с id в качестве ключей, а затем использовать его в качестве справочной таблицы для создания нового объекта с отфильтрованными свойствами по массиву.

const cat = { category1: {"id": "1234"}, category2: {"id": "4567"}, category3: {"id": "123"}};
const arr = ["1234", "4567" ]
const hash = Object.entries(cat)
  .reduce((r, [k, v]) => Object.assign(r, {[v.id]: {[k]: v}}), {})

const result = arr.reduce((r, id) => {
  if(hash[id]) Object.assign(r, hash[id])
  return r;
}, {})

console.log(result)
0 голосов
/ 01 декабря 2018

Вы можете сделать:

var categories = { "category1": {"id": "1234"}, "category2": {"id": "4567"}, "category4": {"id": "45678"}}; var catArray = ["1234", "4567"]; var categoriesFilter = Object.entries(categories).filter(([catKey,catValue]) => { return catArray.includes(catValue.id); });

0 голосов
/ 01 декабря 2018

Категории должны быть, например, массивом объектов.Тогда вы можете использовать .filter():

let categories = [{ "id": "1234" }, { "id": "4567" }];
let catArray = ["1234", "45674"];

const categoriesFilter = categories.filter(cat => {
  return catArray.includes(cat.id);
});

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