我遇到了一个小问题,至少在我所知的范围内,我找不到或找到解决方案。我想基于数组中未定义数量的值来过滤javascript中的对象。我有一个像这样的对象:
categories = { "category1: {"_id": "1234"}, "category2: {"_id": "4567"}, ... };
我还有一个包含ID值的数组,如下所示:
catArray = ["1234", "4567", ... ]
现在,我想从类别对象中筛选出所有类别,以匹配数组中的ID。我设法过滤了单个数组值的类别,但不是全部。它是这样工作的:
const categoriesFilter = categories.filter(cat => {
return cat._id == catArray[0];
});
到目前为止,它正在工作。但是现在我要匹配数组中所有可能的ID值中的类别。我尝试使用for循环来执行此操作,但没有成功。任何想法?非常感谢。
答案 0 :(得分:1)
例如,类别应该是对象数组。然后,您可以使用.filter()
:
let categories = [{ "id": "1234" }, { "id": "4567" }];
let catArray = ["1234", "45674"];
const categoriesFilter = categories.filter(cat => {
return catArray.includes(cat.id);
});
console.log(categoriesFilter);
答案 1 :(得分:0)
您可以首先使用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)
答案 2 :(得分:0)
您可以这样做:
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); });
答案 3 :(得分:0)
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));