2017-07-01 70 views
2

我很新的JavaScript,我無法找出此時的undefined對象插入我的數組:數組中如何顯示空插槽?

function foo(arrA){ 
    if(!arrA || arrA[0] === 0) 
     return undefined; 

    let arrB = []; 
    let prevEntry = 1; 

    for(let i=0; i < arrA.length; i++) { 
     if (2*prevEntry == arrA[i]) { 
      prevEntry *= 2; 
      arrB[i] = (Math.pow(arrA[i], 2)).toString(); 
     } 
    } 

    return arrB; 
} 

foo([2,4,6,8,9,15,16,27]); 

當輸出我得到的2的冪,按預期的方式排列,但它與undefined對象交錯,我只是不明白爲什麼。

(7) ["4", "16", undefined × 1, "64", undefined × 2, "256"] 

感謝您的幫助提前! :-)

+0

*如果*意味着你不要在每個ARRA將值設置到ARRB。所以有空位 –

+0

'if(2 * prevEntry == arrA [i]){'這條線。 –

+0

每當你不知道它崩潰的地方,堅持一個帶有'break'的try-catch塊或者在變量'i'中打印日誌中的東西。如前所述 - 推動將解決它。 – Garamaru

回答

0

當你在特定的索引添加元素陣列,每一個沒有定義先前指標值變爲未定義值初始化。

例如,當你有

var array = []; 
array[3] = 1 

控制檯日誌將提供一個輸出

[undefined, undefined, undefined, 1] 

因此該解決方案是,作爲喬納斯寫道,簡單地推,而不是在將它們插入的元件陣列具體指標。

+0

噢,我的上帝......我很抱歉,這是一個愚蠢的錯誤!我本應該看到這一點。 – Milli

1

您可能要推:

for(let i=0; i <arrA.length; i++){ 
    if (2*prevEntry == arrA[i]){ 
    prevEntry *= 2; 
    arrB.push((Math.pow(arrA[i], 2)).toString()); 
    } 
} 
0

由於此行2*prevEntry == arrA[i],你的代碼被跳過一些指標在arrA和由於兩個arrAarrB的指標是一樣的,arrB沒有價值,即不確定的存在。不要按索引在arrB中插入正方形,使用push(),這將只插入平方數。

function foo(arrA){ 
 
    if(!arrA || arrA[0]===0) 
 
    return undefined; 
 

 
    let arrB =[]; 
 
    let prevEntry = 1; 
 

 
    for(let i=0; i <arrA.length; i++){ 
 
    if (2*prevEntry == arrA[i]){ 
 
     prevEntry *= 2; 
 
     arrB.push(Math.pow(arrA[i], 2)).toString(); 
 
    } 
 
    } 
 
    return arrB; 
 
} 
 
console.log(foo([2,4,6,8,9,15,16,27]));