Javascript:多个数组循环

时间:2010-03-10 05:20:58

标签: javascript arrays

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

2 个答案:

答案 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”的对象,并将其他数组与其进行比较......