列表操作导致无限循环

Yag*_*giz 5 javascript arrays infinite-loop

我试图在Ionic Framework中创建一个用于列表目的的数组,并检查所有callcenter名称的第一个char,将它们添加到字母数组中.

  for (var i = 0; i < callcenterList.length; i++) {
    var value = callcenterList[i]._owner && callcenterList[i]._owner.company.name[0];

    if ((alphabet.indexOf(value) == -1 && isNaN(parseInt(value))) ||
      (isNaN(alphabet[0]) && !isNaN(value))) {
      if(!isNaN(value))
        value = 123;

      alphabet.push(value);

      callcenterList.splice(i, 0, {
        divider: {
          alphabet: value
        }
      });
    }
  };
Run Code Online (Sandbox Code Playgroud)

更换value = 123value = '#'的原因谷歌浏览器和谷歌Chrome金丝雀发生故障,并立即在Mac上使用最多的RAM 100%.

这是一个Javascript错误还是与Google Chrome本身有关?

Str*_*ior 6

这不是浏览器或其他任何内容中的错误:您只是创建一个条件,您的代码进入无限循环,这往往会使浏览器陷入困境.你可以用一个简单的while (true) {}循环做同样的事情.

具体来说,您正在迭代callcenterList,并且任何时候isNaN(alphabet[0]),您正在拼接一个新元素callcenterList.alphabet[0]将你推到的第一个值,在你正在看的条件中,你将设置为'#'.

因此,isNaN(alphabet[0])永远都是如此.

因此,您将继续添加值callcenterList.

因此i < callcenterList.length永远是真实的.