【问题标题】:Browser Crashes with simple JS exercise简单的 JS 练习导致浏览器崩溃
【发布时间】:2016-08-25 09:01:29
【问题描述】:

我尝试在控制台中逐行调试这一行,每一行似乎都可以正常工作,但是当我输入连续的偶数时,我的浏览器会冻结。这可能很明显,但现在它正在躲避我。代码如下:

$('body').append('<input type="number" id="myInput"><input type="submit" id="submit">');
$('#submit').click(function(){
        var myVal = $('#myInput').val();
        myArray = myVal.split("");
        for (var i = 0; i < myArray.length -1; i++){
            if((myArray[i]%2 == 0) && (myArray[i+1]%2 == 0)){
                myArray.splice(i,0,'-')
            }       
        }
        console.log(myArray);
});

【问题讨论】:

  • 使用myArray.length 然后在循环中修改所述数组是非常不好的做法。如果你不断向数组推送东西,那么i 什么时候会成为&lt; 而不是myArray.length?请记住,myArray.lenght 会在每个循环步骤中进行评估。
  • 确实,您不断将“-”推入数组,因此内存不足。您确定要查找的逻辑是:“当 i 是偶数且 i+1 也是偶数时,将字符串减号推入 i 之后的数组中。”
  • 好的,我看到了在循环计数器中使用增加的数组长度的问题......
  • Voodoo 黑魔法替代品:result = $('#myInput').val().replace(/([02468])(?=[02468])/,'$1-')

标签: javascript arrays loops


【解决方案1】:

我不确定您需要对此做什么,但此代码有效:

$('body').append('<input type="number" id="myInput"><input type="submit" id="submit">');
$('#submit').click(function(){
    var myVal = $('#myInput').val();
    myArray = myVal.split("");
    myArraylength = myArray.length - 1;
    for (var i = 0; i < myArraylength; i++){
        if((myArray[i]%2 == 0) && (myArray[i+1]%2 == 0)){
            myArray.splice(i+1,0,'-')
        }
    }
    console.log(myArray);
});

【讨论】:

  • 这会在前面添加减号,但我的实际职责是在偶数之间插入减号。
  • 也许从一个空数组开始并有条件地构建它是更好的做法?
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多