2016-02-18 36 views
5

İyonik Çerçeve'de listeleme amaçlı bir dizi oluşturmaya çalışıyorum ve bunları bir alfabe dizisine eklemek için tüm çağrı merkezi adının ilk karakterini kontrol ediyorum. value = '#' ile value = 123 değiştirilmesiListe manipülasyonu sonsuz döngüye götürür

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 
     } 
     }); 
    } 
    }; 

Google Chrome ve Google Chrome Kanarya arıza ve derhal Mac RAM% 100'e kadar kullanmak neden olur.

Bu bir Javascript hatası mı yoksa Google Chrome'un kendisiyle mi ilişkilidir?

+0

Bunu daha önce hiç duymamıştım ... – durbnpoisn

+0

Tek yerine çift tırnak kullanırsanız herhangi bir fark yaratır mı? –

+1

Eh, # ise, o zaman alfabenin bir parçası değildir ve bu bir sayı değildir ve döngünüzü callcenterList.length (ve döngüyü içeriye doğru) ile sınırlandırdığınız için, bununla birlikte # ve ne krom ile? :) – Icepickle

cevap

6

Bu, tarayıcınızda veya herhangi bir şeyde bir hata değildir: yalnızca kodunuzun sonsuz bir döngüye girdiği ve tarayıcınızı her zaman ele geçirme eğiliminde olan bir koşul oluşturuyorsunuz. Aynı şeyi basit bir while (true) {} döngü ile de yapabilirsiniz.

Özellikle, callcenterList üzerinde yineleme yapıyorsunuz ve her zaman isNaN(alphabet[0]), yeni bir öğeyi callcenterList'a ekliyorsunuz. alphabet[0], oraya koştuğunuz ilk değere sahip olacak, hangi şartlara baktığınıza göre, '#' olarak ayarlanacaksınız. Bu nedenle, isNaN(alphabet[0]) her zaman doğru olacaktır. Bu nedenle callcenterList'a değerler eklemeyi sürdüreceksiniz.

Bu nedenle i < callcenterList.length her zaman doğru olacaktır. o uzunluk yeniden değerlendirilmektedir inanmak zor olduğundan

+0

Bu, basit bir döngüdür. Ve sonsuz bir döngü yaratabilecek herhangi bir durum yoktur. "If" koşulu yanlış olsa bile, for döngüsü yinelemeye devam etmelidir. Bu durumda ne yapıyorum? – Yagiz

+1

@Yagiz Döngü içindeki yineleme dizisine 'ekleme 'ile bir eleman ekliyorsunuz. Bu her zaman yapıldığı için, dizinin uzunluğuna asla ulaşamayacağım. –

+0

@Yagiz: Cevabımla ilgili daha ayrıntılı bir açıklama ekledim. Temel olarak, E_net4 ne demişti: dizininizin uzunluğunu her bir yinelemeyle artırıyorsunuz, bu yüzden hiç bir zaman sonuna ulaşmayacaksınız. – StriplingWarrior

1

, burada mola deyimi olmadan

ne elde edebileceğiniz sorunlar basit bir örnektir, kod sonsuz döngü içinde çalışır. (Liste olabilir ne süreyle konsol kaydını kontrol)

var list = [0,1,2,3]; 
 

 
for (var i = 0; i < list.length; i++) { 
 
    list.push(i); 
 
    if (i > 1000) { 
 
    break; 
 
    } 
 
} 
 

 
console.log(list.length);

Kodunuz yapar tam olarak aynı, ancak o listenizin belirli bir konumda yeni bir unsur katacak ek yeri işlevi (nl, endeksiniz). Sonunda, hala uzunluğu artacak ve listeniz bir daha olacak

İlgili konular