2017-07-01 6 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

どこがクラッシュするのかわからないときは、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]));

関連する問題