Javascript 在数组中搜索元素

Javascript 在数组中搜索元素,javascript,jquery,Javascript,Jquery,我的数据[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,tru

我的
数据[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);
    }
}
for(var n=0;n
在:
['id1'、['a'、[1,2,3,4,5]]、[b'、[3,4,5,6,7]]


非常感谢。

如果您已经包括jQuery,请使用以下命令:

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

较短的vanilla JS版本是阵列上的直接版本,但IE默认情况下没有此版本。

如果您已经包括jQuery,请使用,如下所示:

if($.inArray(num, data[l][m]) > -1) {
  number = data[l][0];
  document.form.options[l-1] = new Option(number,number,true,true);
}
较短的vanilla JS版本是阵列上的直接版本,但IE默认情况下没有此版本。

您可以使用,尽管它仍然具有与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
方法。

您可以使用,尽管它仍然具有与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
方法。

。第一种方法是创建对
数据[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);
    }
}

我没有什么大的改变可以推荐,但确实有一些调整可以推荐。第一种方法是创建对
数据[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);
    }
}

@DGT:请注意,
inArray
所做的一切都是你所做的;但是,既然您已经在使用jQuery,那么还可以节省一些行和调试(作为副产品,它重用循环不变量
data[l][m]
,否则我建议您将其缓存到本地)。谢谢各位,但我也可以使用inArray在嵌套数组中搜索,例如['id1',['a',[1,2,3,4,5]],['b',[3,4,5,6,7]]?@DGT-Yup,当你在数组上迭代时,它仍然只是一个数组,不管它位于何处。@DGT:注意,
inArray
所做的一切都是你所做的;但是,既然您已经在使用jQuery,那么还可以节省一些行和调试(作为副产品,它重用循环不变量
data[l][m]
,否则我建议您将其缓存到本地)。谢谢各位,但我也可以使用inArray在嵌套数组中搜索,例如['id1',['a',[1,2,3,4,5]],['b',[3,4,5,6,7]]?@DGT-Yup,无论它位于何处,当您对它进行迭代时,它仍然只是一个数组。