如果值包含,则推送到数组

时间:2014-07-18 12:31:17

标签: javascript

这是我写的代码

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

但是,运行此代码会冻结浏览器。这段代码有什么问题?

1 个答案:

答案 0 :(得分:4)

您忘了var两次:

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

...

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

因此,所有循环都使用相同的全局变量i。当您致电arrayContains时,您会重置someFunction中使用的计数器,这会导致无限循环。

小心在所有循环中添加var声明:

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

旁注:你不必在arrayContains中迭代整个数组,你可以做到

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