搜索数组中的元素

我的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]]]
提前谢谢了。

如果你已经包含了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版本是Array上的直接.indexOf() ,但默认情况下IE没有这个。

您可以使用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没有Arrays的indexOf方法。

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

 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); } }