搜索数组中的元素

时间:2010-09-15 21:30:12

标签: javascript jquery

我的data[l][m]包含1,2,3,4,5 我正在尝试搜索特定的数字,在其中说“2”。有更好的方法吗?

for (var n = 0; n < data[l][m].length; n++) {
    if(data[l][m][n] == num){ // num is equal to '2'
        number = data[l][0];
        document.form.options[l-1] = new Option(number,number,true,true);
    }
}

如何:['id1',['a',[1,2,3,4,5]],['b',[3,4,5,6,7]]]
非常感谢提前。

3 个答案:

答案 0 :(得分:3)

如果您已经包含jQuery,请使用$.inArray(),如下所示:

if($.inArray(num, data[l][m]) > -1) {
  number = data[l][0];
  document.form.options[l-1] = new Option(number,number,true,true);
}

较短的vanilla JS版本是数组上的直接.indexOf(),但默认情况下IE没有这个。

答案 1 :(得分:0)

你可以使用indexOf,虽然它仍然具有与for循环相同的O(n)复杂度:

var pos = data[l][m].indexOf(num);
if (pos !== -1)
{
  // element was found
  number = data[l][0];
  document.form.options[l-1] = new Option(number,number,true,true);
}

但请注意,旧版本的IE没有数组的indexOf方法。

答案 2 :(得分:0)

我没有重大改变建议,但确实有一些调整建议。第一种是创建对data[l]的临时引用,以将读取复杂度降低1级。这是为了编码员的利益而进行的外观改变。另一个是缓存您正在搜索的数组的长度,这有助于提高性能。如果您使用for循环替换while循环,如下所示,您还可以删除比较操作。

var layer1 = data[l];
var n = layer1[m].length;
while (n--) {
    if (layer1[m][n] == num) { // num is equal to '2' 
        number = layer1[0];
        document.form.options[l - 1] = new Option(number, number, true, true);
    }
}