gpt4 book ai didi

javascript - 搜索对象数组(两个属性)以查找多个限制

转载 作者:行者123 更新时间:2023-11-28 17:18:09 26 4
gpt4 key购买 nike

在提出问题之前,我对这个糟糕的标题表示歉意,但我无法更好地描述它。

我有一个以这种方式创建的对象数组:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com