在提出问题之前,我对这个糟糕的标题表示歉意,但我无法更好地描述它。
我有一个以这种方式创建的对象数组:
var setitems = new Array();
setitems.push({set: "1000", item: "5000"});
setitems.push({set: "1000", item: "5010"});
setitems.push({set: "1000", item: "5020"});
setitems.push({set: "1000", item: "5050"});
setitems.push({set: "1010", item: "5010"});
setitems.push({set: "1010", item: "5020"});
setitems.push({set: "1010", item: "5030"});
setitems.push({set: "1020", item: "5020"});
setitems.push({set: "1020", item: "5040"});
setitems.push({set: "1020", item: "5041"});
setitems.push({set: "1030", item: "5040"});
setitems.push({set: "1030", item: "5041"});
setitems.push({set: "1030", item: "5030"});
setitems.push({set: "1040", item: "5041"});
setitems.push({set: "1040", item: "5042"});
项目和集合处于多对多关系。
还有一个像这样的简单字符串数组:
var itemlist = new Array();
itemlist.push("5010");
itemlist.push("5020");
// itemlist = ["5010", "5020"];
我需要知道哪些集合包含项目列表中的所有项目。
在此示例中,它应返回 1000 和 1010。
每组的项目数量是可变的。
项目列表中的操作系统项目数是可变的。
谢谢。
最佳答案
您可以首先按集合对项目进行分组,然后检查某个集合是否包含 itemList 中的每个项目。希望这会有所帮助。
const setitems = [];
setitems.push({set: "1000", item: "5000"});
setitems.push({set: "1000", item: "5010"});
setitems.push({set: "1000", item: "5020"});
setitems.push({set: "1000", item: "5050"});
setitems.push({set: "1010", item: "5010"});
setitems.push({set: "1010", item: "5020"});
setitems.push({set: "1010", item: "5030"});
setitems.push({set: "1020", item: "5020"});
setitems.push({set: "1020", item: "5040"});
setitems.push({set: "1020", item: "5041"});
setitems.push({set: "1030", item: "5040"});
setitems.push({set: "1030", item: "5041"});
setitems.push({set: "1030", item: "5030"});
setitems.push({set: "1040", item: "5041"});
setitems.push({set: "1040", item: "5042"});
const itemlist = [];
itemlist.push("5010");
itemlist.push("5020");
const find = (arr, list) => {
const grouped = arr.reduce((acc, val) => ({ ...acc, [val.set]: (acc[val.set] || []).concat(val.item) }), {});
return Object.keys(grouped).reduce((acc, val) => {
if (list.every(item => grouped[val].includes(item))) acc.push(val);
return acc;
}, []);
};
console.log(find(setitems, itemlist));
关于javascript - 搜索对象数组(两个属性)以查找多个限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53006465/