TL DR;在多个数组中对值进行排序和比较的最有效方法是什么?
好的,所以我们假设一些常量来使这一切变得简单 var a = [1,2,3,4,5,6],b = [0,9,8,7,6,88,99,77],i,j;
现在,如果我想查看a中的任何值是否等于b中的任何其他值,我必须对其中一个数组进行6次排序。这是很多工作,似乎应该有一种更有效的方法来做到这一点。对于那些需要视觉助手的人来说,你是(而且我知道 - 而++我只是不喜欢使用他们):
for (i = a.length - 1; i > -1; i -= 1) {
for (j = b.length - 1; j > -1; j -= 1) {
if (a[i] === b[j]) {
return b[j];
}
}
}
对于A中的EACH元素,B阵列会运行一次。再次,当然有更有效的方法来完成此任务吗?
-Akidi
答案 0 :(得分:3)
取决于输入数组的大小(那里有几个权衡) - 对于像你的例子这样的小输入,你的嵌套循环是最简单的。
如果你有庞大的数组,并且可以控制它们的构造,可以考虑保持一个地图(JS中的Object)作为查找集(如果你在循环中创建a
,你可以构建并行设置。)
var setA = {};
for (int i = 0; i < a.length; i++) {
setA[a[i]] = true;
}
然后,只需选中setA[
?]
即可查看集合中是否存在某些内容。
与B同时使用,或同时使用,等等,视您的需要而定。
答案 1 :(得分:1)
也许这样的事可能会有所帮助?
var a = [1, 2, 3, 9, 5, 0], b = [0, 9, 8, 7, 6, 88, 99, 77];
var a_dict = {}, l = a.length;
for (var i=0; i < l; i++) {
a_dict[a[i]] = 1;
}
l = b.length;
for (var i=0; i < l; i++) {
if(!!a_dict[b[i]]){
console.log(b[i]);
}
}
您可以将一个数组转换为“类似dict”的对象,并将其他数组与其进行比较......