Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于相对较大的数组,请使用Array.indexOf_Javascript - Fatal编程技术网

Javascript 对于相对较大的数组,请使用Array.indexOf

Javascript 对于相对较大的数组,请使用Array.indexOf,javascript,Javascript,是否有一种方法可以实现indexOf功能,以确定字符串是否在数组中,对于非常大的数组,相对较快?当我的数组超过40000个值时,我的应用程序会冻结几秒钟 考虑以下代码: var arr = []; function makeWord() { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for( var i=0; i <

是否有一种方法可以实现
indexOf
功能,以确定字符串是否在数组中,对于非常大的数组,相对较快?当我的数组超过40000个值时,我的应用程序会冻结几秒钟

考虑以下代码:

var arr = [];

function makeWord()
{
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for( var i=0; i < 5; i++ )
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    return text;
}
function populateArr(){
  for (var i=0;i<40000;i++){
    arr[i] = makeWord();
  }
  console.log("finished populateArr");
}
function checkAgainst(){
  for (var i=0;i<40000;i++){
    var wordToSearch = makeWord();
    if (isFound(wordToSearch)){
      console.log("found "+wordToSearch);
    }
  }
  console.log("finished checkAgainst");
}

function isFound(wordToSearch){
  //return $.inArray(wordToSearch,arr) > -1;
  return arr.indexOf(wordToSearch) > -1;
}

populateArr();
checkAgainst();
var arr=[];
函数makeWord()
{
var text=“”;
var-mablue=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”;
对于(变量i=0;i<5;i++)
text+=可能的.charAt(Math.floor(Math.random()*可能的.length));
返回文本;
}
函数populateArr(){
对于(var i=0;i-1;
}
populateArr();
对照检查();

在这段代码中,我用40k个随机字符串填充数组
arr
。然后,在
checkback
中,我创建了40000个其他随机字符串,如果在
arr
上找到,则会检查每个字符串。这会使chrome冻结大约2秒钟。打开chrome DevTools上的探查器,我看到
isFound
是obv就CPU而言,这是非常昂贵的。即使我将for循环迭代次数在
检查中降低到4000次,它仍然会冻结大约一秒钟


事实上,我有一个chrome扩展和一个关键字数组,它可以扩展到大约10k个字符串。然后,我必须使用
array.indexOf
来查看该数组中是否有200个其他关键字。这使得我的页面每隔一段时间就会冻结一次,从这个示例中,我怀疑这就是原因。想法?

尝试在对象中使用关键字ead:

var arr = {};

function makeWord() // unchanged
function populateArr(){
  for (var i=0;i<40000;i++){
    arr[makeWord()] = true;
  }
  console.log("finished populateArr");
}
function checkAgainst() // unchanged

function isFound(wordToSearch){
  return arr[wordToSearch];
}

populateArr();
checkAgainst();
var-arr={};
函数makeWord()//未更改
函数populateArr(){
对于(var i=0;i