2016-03-29 21 views
0

İki diziyi karşılaştırmaya ve yalnızca verilen iki dizinden birinde bulunan herhangi bir öğeyle yeni bir dizi döndürmeye çalışıyorum.Bu tanımsız değer nereden geliyor?

örn. [1,2,3,4] ve [1,2,3]'un karşılaştırılması sonucu: [4].

Sorun şu ki, döngü yürütüldükten sonra 'undefined' öğeyi alıyorum. Bunun

function diff(arr1, arr2){ 
    var newArr = []; 
    for(i=arr1[0]; i<=arr1.length; i++){ 
     if(arr2.indexOf(arr1[i])=== -1){ 
     newArr.push(arr1[i]); 
     } 
    } 
    console.log(newArr); 
}; 

diff([1,2,3,4], [1,2,3]); 

sonuç [4, undefined] olduğunu. Neyi yanlış yapıyorum?

+6

'i = arr1 [0]' sen <= length' 'kadar döngü – user234461

+3

istediğini muhtemelen değil klasik bir de birebir hatadır. – deceze

cevap

1

for döngüsünüz yanlış tanımlandı. Bu i=0 başlar ve çalışmalıdır sonuçların dizisinde nihai tanımlanmamış bir değer eklenmesi ile sonuçlanır gerekenden daha bir kez daha yinelemek çalışıyorsunuz i<=arr1.length kadar çalıştırarak i<arr1.length

function diff(arr1, arr2){ 
    var newArr = []; 
    for(i=0; i<arr1.length; i++){ 
     if(arr2.indexOf(arr1[i])=== -1){ 
     newArr.push(arr1[i]); 
     } 
    } 
    console.log(newArr); 
}; 

kadar. Mario Garcia'nın yorumlarda söylediği gibi, son yinelemede döngü, mevcut olmayan arr[4]'a erişmeye çalışacaktır, bu nedenle tanımlanmamıştır.

+0

Net olmak için: arr1 [4] = tanımsızdır ve arr2 "undefinned" ile uyumlu olmadığından, fonksiyonunuz newArr'a eklenir. Sadece döngü indekslerini yukarıda belirtildiği gibi düzeltin –

+0

Teşekkürler, uyumaya ihtiyacım var sanırım :) – 11223342124

+0

Sorun değil! Kolay hatalar yapmak – millerbr

0

Yineleyiciniz yanlış çünkü yineleyiciniz 0'dan (ilk dizi öğesiyle eşleşecek şekilde) değil, dizinin sıfır dizinindeki değerine göre sıfırlanır (sizin durumunuzda 1 numaradır, ancak güzel olabilir) çok fazla şey); ve sonra yineleyici bir dizinin uzunluğuna ulaştığında dizin aralığının dışına çıkarsınız, sizin durumunuzda 4 ve arr1 [4] tanımsızdır.

döngü başlangıç ​​değerini ve durumunu düzelttikten sonra, elde ederiz:

function diff(arr1, arr2){ 
 
    var newArr = []; 
 
    for(i = 0; i < arr1.length; i++){ 
 
     if(arr2.indexOf(arr1[i])=== -1){ 
 
     newArr.push(arr1[i]); 
 
     } 
 
    } 
 
    alert(newArr); 
 
}; 
 

 
diff([1,2,3,4], [1,2,3]); // 4 
 
diff([1,2,3,4,5], [1,3]); // 2, 4, 5

İlgili konular