繁体   English   中英

根据javascript中的匹配条件从数组数组中查找匹配项

[英]Find matches from an array of arrays based on matches condition in javascript

鉴于我有一个数组,如下所示:

var array = [["001"," 003"],["002"," 001"],["001"," 002"],["002"," 001"], ["", "001"]]

条件是数组必须相互匹配2个或更多个匹配项,然后它将结果存储到新数组中。

我正在使用以下javascript方法,该方法将针对数组中的每个数组进行比较。

我正在尝试做的是使javascript方法不循环数组中的每个数组来查找匹配项,但这将基于上述条件(2个匹配项或更多)

JavaScript方法:

 var array = [["001"," 003"],["002"," 001"],["001"," 002"],["002"," 001"], ["", "001"]] console.log( array.shift().reduce(function(res, v) { if (res.indexOf(v) === -1 && array.every(function(a) { return a.indexOf(v) !== -1; })) res.push(v); return res; }, []) ) 

上面的数组的结果将为空,根据上述条件(至少2个匹配项),我希望它是:

["001", "002", " 001"]

您的回答将不胜感激!

谢谢

有关O(N)解决方案(当前的.every里面.reduceO(N^2)可以使用reduce创建的字符串,其值是字符串的出现次数索引的对象。 然后,对对象的keys进行.filter ,以获得至少具有两个数的keys

 const input = [["001"," 003"],["002"," 001"],["001"," 002"],["002"," 001"], ["", "001"]]; const obj = input.reduce((a, arr) => { arr.forEach((str) => { a[str] = (a[str] || 0) + 1; }); return a; }, {}); const output = Object.keys(obj) .filter(key => obj[key] >= 2) console.log(output); 

请注意,由于输入中包含两个" 001"字符串,因此它们也包含在输出中。

对于ES5版本,我通过Babel运行了以上内容,并得到:

 var input = [["001", " 003"], ["002", " 001"], ["001", " 002"], ["002", " 001"], ["", "001"]]; var obj = input.reduce(function (a, arr) { arr.forEach(function (str) { a[str] = (a[str] || 0) + 1; }); return a; }, {}); var output = Object.keys(obj).filter(function (key) { return obj[key] >= 2; }); console.log(output); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM