我正在为我的聊天机器人开发一个表单模块,该过程的一部分涉及系统直觉使用哪个端点来根据JSON属性发送表单(所有这些都以其各自的关系保存在数据库中) .
简化问题,我需要获得一种能够接收“动态”过滤器的算法:
A组(动态滤镜): ["name", "name", "name", "email", "breed", "age", "age", "school"]
B 组:(样本) `[[“姓名”,“年龄”,“电子邮件”],[“姓名”,“品种”,“年龄”],[“姓名”,“年龄”],[ “姓名”、“年龄”、“学校”]、[“姓名”、“电子邮件”]]
最终结果如下:
结果: [["name", "email"], ["name", "age", "school"], ["name", "breed", "age"]]
唯一的限制是当您创建与过滤器元素匹配的数组时,必须删除这些过滤器元素,因此过滤器是动态。
在其他地方,我知道我可以通过明确指示每组属性对应的形式来简化过程,但我想开发这个算法作为个人挑战。此外,在详细阐述算法时,我意识到如果两个端点共享相同的属性,则会发生唯一的失败,这是不可能的,至少在我的情况下。
欢迎任何形式的合作,谢谢(我的第一篇文章)。
const filter = ["name", "name", "name", "email", "breed", "age", "age", "school"];
const input = [["name", "age", "email"], ["name", "breed", "age"], ["name", "age"], ["name", "age", "school"], ["name", "email"]];
let copy = filter.slice();
const result = input.toSorted((a,b) => b.length-a.length).filter(arr => {
let i = 0;
const filtered = copy.filter(item => !(arr[i] === item && ++i));
if(filtered.length + arr.length === copy.length){
copy = filtered;
return true;
}
});
result.reverse().forEach(arr => console.log(...arr));