javascript - 如果值包含则插入数组

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

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

最佳答案

你忘记了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;
}

关于javascript - 如果值包含则插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24825113/

相关文章:

javascript - 在三个 js 中加载 JSON 模型上的动画颜色

php - 在不使用 GET 参数的情况下将 javascript 变量传递到 php 代码中?

javascript - 如果单选按钮适合一行,如何设置不同的样式?

javascript - 为 js 对象分配 setter/getter

javascript - 事件页面和背景页面的区别

javascript - JavaScript 中的日期操作

javascript - 使用 Razor,如何将 bool 值呈现为 JavaScript 变量?

javascript - 如何将多个文件添加到数组中并在AngularJs中一个一个地访问文件

javascript - PreventDefault() 似乎禁用了整个表单?

javascript - 使用 Javascript 和 jQuery 自动填充选择框