繁体   English   中英

在数组中搜索元素

[英]search for element within an array

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

较短的.indexOf() 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的较早版本没有用于数组的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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM