【问题标题】:Why does this javascript code have an infinite loop?为什么这个javascript代码有一个无限循环?
【发布时间】:2011-02-19 06:39:36
【问题描述】:

optionElements 是一个二维数组。每个元素都有一个长度为 2 的数组。它们是一个整数和一个元素。我有一个名为链接框的选择列表,我想将所有元素添加到选择列表中。我希望它们进入的顺序很重要,并且由每个元素的数量决定。它应该从最小到最高。所以可以这样想:

optionElements 是:

[ [5, <option>], [3, <option], [4, <option], [1, <option], [2, <option]]

它会按这些数字的顺序将它们添加到链接框中。但事实并非如此。这是第一次之后的无限循环。我添加了 x 约束只是为了阻止它冻结我的浏览器,但你可以忽略它。

var b;
var smallest;
var samllestIndex;
var x = 0;
while(optionElements.length > 0 && ++x < 100)
{
    smallestIndex = 0;
    smallest = optionElements[0][0];
    b = 0;
    while( ++b < optionElements.length)
    {
        if(optionElements[b][0] > smallest)
        {
            smallestIndex = b;
            smallest = optionElements[b][0];
        }                    
    }                    
    linkbox.appendChild(optionElements[smallestIndex][1]);
    optionElements.unshift(optionElements[smallestIndex]);
}

谁能指出我的问题出在哪里?

更新

在while循环中忘记添加>符号是错误的,但这不是问题的原因。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我可以告诉你 .unshift() 在 IE 中不起作用。因此,如果您之前使用过 IE,您可能想在 Mozilla/Safari 中进行测试。

    【讨论】:

    • 现在我想,你的意思是从 optionElements 数组中删除项目吗? unshift() 添加一个元素。你会想要使用 shift() 或 pop() 之类的东西。
    • 这也是我的想法,我认为他正在添加到数组中并且有一个条件是只有当数组为空时循环才会退出。也许他认为 unshift 会像流行音乐一样从头开始转变?
    • 也许他在寻找splice()w3schools.com/jsref/jsref_splice.asp
    【解决方案2】:

    这是一个无限循环,因为 unshift 会将您传入的数组添加到您正在调用它的数组中。所以外部循环检查 optionElements 是否有超过 0 的项目,然后在最后它变得更大,因此循环永远不会退出。 http://www.w3schools.com/jsref/jsref_unshift.asp

    我也不确定你为什么要这样做。为什么不先对 optionElements 数组进行排序,然后对其进行一次迭代以将每个元素添加到链接框?

    【讨论】:

      【解决方案3】:

      来自javascript unshift() function

      unshift() 方法将新元素添加到数组的开头,并返回新的长度。

      这意味着你不断地在开头添加元素而不是删除它们,从而产生无限循环。

      尝试使用计数器运行循环optionElements.length 性能更好)。或者你可以使用 shift() 来获得想要的效果:

      optionElements.shift();
      

      :D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 2020-02-02
        • 2020-07-12
        相关资源
        最近更新 更多