Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个javascript代码有一个无限循环?_Javascript - Fatal编程技术网

为什么这个javascript代码有一个无限循环?

为什么这个javascript代码有一个无限循环?,javascript,Javascript,OptioneElements是一个2d数组。每个元素都有一个长度为2的数组。这是一个整数和一个元素。我有一个名为linkbox的选择列表,我想将所有元素添加到选择列表中。我希望它们进入的顺序很重要,并且由每个元素的数量决定。它应该从最小到最高。所以你可以这样想: 可选元素是: [ [5, <option>], [3, <option], [4, <option], [1, <option], [2, <option]] 我可以告诉你。unshift()在I

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

可选元素是:

[ [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();