简体   繁体   English

如果值包含则推送到数组

[英]Pushing to array if value contains

Here is the code I have written 这是我写的代码

function arrayContains(value,array){
    var result = false;
    for(i=0;i<array.length;i++){
        if(array[i]==value){
            result = true;
        }
    }
    return result;
}
function someFunction(array2){
    var arr = [];
    for(i = 0 ; i<array2.length; i++){
        var val = array2[i];
        if(!arrayContains(val,arr)){
            arr.push(val);
        }
    }
    console.log(arr);
}

But, running this code, freezes the browser. 但是,运行此代码会冻结浏览器。 What's wrong with this code? 此代码有什么问题?

You forgot var twice : 您两次忘记了var

for(i=0;i<array.length;i++){

...

for(i = 0 ; i<array2.length; i++){

So all your loops use the same, global, variable i . 因此,所有循环都使用相同的全局变量i When you call arrayContains , you reset the counter used in someFunction which leads to that infinite loop. 当您调用arrayContains ,您将重置someFunction中使用的计数器,这会导致无限循环。

Be careful to add the var declaration in all your loops : 注意在所有循环中添加var声明:

for(var i=0; i<array.length; i++){

Side note : you don't have to iterate over the whole array in arrayContains , you can do 旁注:您不必遍历arrayContains的整个数组,您可以执行

function arrayContains(value, array){
    for(var i=0; i<array.length; i++){
        if(array[i]==value) return true;
    }
    return false;
}

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

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