使用动态过滤器从数组中提取子数组

问题描述 投票:0回答:1

我正在为我的聊天机器人开发一个表单模块,该过程的一部分涉及系统直觉使用哪个端点来根据JSON属性发送表单(所有这些都以其各自的关系保存在数据库中) .

简化问题,我需要获得一种能够接收“动态”过滤器的算法:

A组(动态滤镜): ["name", "name", "name", "email", "breed", "age", "age", "school"]


此外,算法还必须接收二维数组,如下:

B 组:(样本) `[[“姓名”,“年龄”,“电子邮件”],[“姓名”,“品种”,“年龄”],[“姓名”,“年龄”],[ “姓名”、“年龄”、“学校”]、[“姓名”、“电子邮件”]]

最终结果如下:

结果: [["name", "email"], ["name", "age", "school"], ["name", "breed", "age"]]


如您所见,

唯一的限制是当您创建与过滤器元素匹配的数组时,必须删除这些过滤器元素,因此过滤器是动态

在其他地方,我知道我可以通过明确指示每组属性对应的形式来简化过程,但我想开发这个算法作为个人挑战。此外,在详细阐述算法时,我意识到

如果两个端点共享相同的属性,则会发生唯一的失败,这是不可能的,至少在我的情况下。

欢迎任何形式的合作,谢谢(我的第一篇文章)。

arrays algorithm sorting multidimensional-array dynamic
1个回答
0
投票
不清楚

    排序有什么逻辑
  1. 匹配包含其他项目的项目的逻辑是什么(看起来很贪心,我们需要先匹配最长的项目)
否则,根据我所理解的规则进行尝试:

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));

© www.soinside.com 2019 - 2024. All rights reserved.