根据javascript中的匹配条件从数组数组中查找匹配项
假设我有一个数组,如下所示:根据javascript中的匹配条件从数组数组中查找匹配项,javascript,arrays,Javascript,Arrays,假设我有一个数组,如下所示: var array = [["001"," 003"],["002"," 001"],["001"," 002"],["002"," 001"], ["", "001"]] 条件是数组必须相互匹配2个或更多个匹配项,然后将结果存储到新数组中 我使用下面的javascript方法,该方法将对数组中的每一个数组进行比较 我试图做的是使javascript方法不循环数组中的每一个数组来查找匹配项,但它将基于上述条件(2个或更多匹配项) Javascript方法: va
var array = [["001"," 003"],["002"," 001"],["001"," 002"],["002"," 001"], ["", "001"]]
条件是数组必须相互匹配2个或更多个匹配项,然后将结果存储到新数组中
我使用下面的javascript方法,该方法将对数组中的每一个数组进行比较
我试图做的是使javascript方法不循环数组中的每一个数组来查找匹配项,但它将基于上述条件(2个或更多匹配项)
Javascript方法:
var数组=[[“001”、“003”]、[“002”、“001”]、[“001”、“002”]、[“002”、“001”]、[“”和“001”]]
console.log(
array.shift().reduce(函数(res,v){
if(res.indexOf(v)==-1&&array.every(函数a){
返回a.indexOf(v)!=-1;
}))res.push(v);
返回res;
}, [])
)
对于onO(N)
解决方案(您当前的。.reduce
中的每个都是O(N^2)
),您可以使用reduce
创建一个按字符串索引的对象,其值是该字符串的出现次数。然后,.filter
对对象的键进行过滤,以获得至少有两个计数的键:
const-input=[[“001”、“003”]、[“002”、“001”]、[“001”、“002”]、[“002”、“001”]、[“”、“001”];
const obj=输入。减少((a,arr)=>{
arr.forEach((str)=>{
a[str]=(a[str]| | 0)+1;
});
返回a;
}, {});
常量输出=对象键(obj)
.filter(key=>obj[key]>=2)
控制台日志(输出)
对于onO(N)
解决方案(您当前的.reduce
中的每个都是O(N^2)
),您可以使用reduce
创建一个按字符串索引的对象,其值是该字符串的出现次数。然后,.filter
对对象的键进行过滤,以获得至少有两个计数的键:
const-input=[[“001”、“003”]、[“002”、“001”]、[“001”、“002”]、[“002”、“001”]、[“”、“001”];
const obj=输入。减少((a,arr)=>{
arr.forEach((str)=>{
a[str]=(a[str]| | 0)+1;
});
返回a;
}, {});
常量输出=对象键(obj)
.filter(key=>obj[key]>=2)
控制台日志(输出)
Hi@CertainPerformance,我已经更新了问题,上面数组的结果是空的,但我希望它不是空的,而不是在新数组中有一个001
和002
值。谢谢@CertainPerformance,是的,应该是。“001”也应该包含在输出中,因为它与hi@CertainPerformance匹配,我已经更新了问题,上面数组的结果是空的,但我希望它不是空的,而不是在新数组中有一个001
和002
值。谢谢@CertainPerformance,是的,应该是。“001”也应该包含在输出中,因为它是匹配的,所以在这上面得到了它。非常感谢您的回答!顺便问一下,这些javascript内置函数是否仅限于特定版本的浏览器?还是所有浏览器都支持它?谢谢代码使用ES6语法,对ES6语法的支持很广泛,但并不统一,还使用Object.entries
(类似,但更晚,ES2017)。理想情况下,在构建过程中使用Babel和polyfills,这样您就可以使用该语言的最新版本编写代码,并在生产过程中自动传输到ES5。有没有办法将其转换为不使用ES6或ES2017?因为刚才我在我的项目中进行了尝试,但是对象不支持它。谢谢改用对象.键
。我通过Babel运行了代码,现在可以正常工作了。非常感谢!好的,我明白了。非常感谢您的回答!顺便问一下,这些javascript内置函数是否仅限于特定版本的浏览器?还是所有浏览器都支持它?谢谢代码使用ES6语法,对ES6语法的支持很广泛,但并不统一,还使用Object.entries
(类似,但更晚,ES2017)。理想情况下,在构建过程中使用Babel和polyfills,这样您就可以使用该语言的最新版本编写代码,并在生产过程中自动传输到ES5。有没有办法将其转换为不使用ES6或ES2017?因为刚才我在我的项目中进行了尝试,但是对象不支持它。谢谢改用对象.键
。我通过Babel运行了代码,现在可以正常工作了。非常感谢!