为什么这个javascript代码有一个无限循环?
OptioneElements是一个2d数组。每个元素都有一个长度为2的数组。这是一个整数和一个元素。我有一个名为linkbox的选择列表,我想将所有元素添加到选择列表中。我希望它们进入的顺序很重要,并且由每个元素的数量决定。它应该从最小到最高。所以你可以这样想: 可选元素是:为什么这个javascript代码有一个无限循环?,javascript,Javascript,OptioneElements是一个2d数组。每个元素都有一个长度为2的数组。这是一个整数和一个元素。我有一个名为linkbox的选择列表,我想将所有元素添加到选择列表中。我希望它们进入的顺序很重要,并且由每个元素的数量决定。它应该从最小到最高。所以你可以这样想: 可选元素是: [ [5, <option>], [3, <option], [4, <option], [1, <option], [2, <option]] 我可以告诉你。unshift()在I
[ [5, <option>], [3, <option], [4, <option], [1, <option], [2, <option]]
我可以告诉你。unshift()在IE中不起作用。因此,如果您以前使用IE,您可能需要在Mozilla/Safari中进行测试。这是一个无限循环,因为unshift会将您传入的数组添加到您调用它的数组中。因此,外部循环会检查OptioneElements是否有多于0的项,最后它会变大,这样循环就永远不会退出。 我也不知道在任何情况下为什么要这样做。为什么不先对optionElements数组排序,然后迭代一次,将每个元素添加到链接框中?来自: unshift()方法将新元素添加到数组的开头,并返回新的长度 这意味着您要不断地在开始处添加元素,而不是删除它们,从而产生无限循环 尝试使用计数器运行循环
optionElements.length
timesbetter performance)。或者可以使用shift()获得所需的效果:
optionElements.shift();
:D现在我想起来了,您的意思是要从optionElements数组中删除项吗?unshift()添加了一个元素。您可能希望使用类似shift()或pop()的内容。这也是我的想法,我认为他正在添加到数组中,并且有一个条件,即循环只有在数组为空时才存在。也许他认为取消移位会使循环从末尾开始移位,就像pop一样?也许他在寻找
splice()
?
optionElements.shift();