2017-01-24 9 views
1

Javascriptコードの問題を教えてもらえますか?Javascript:ループ内でarray.slice()を使用し、期待通りに動作しない

var a = ["zero", "one", "two", "three"]; 
 
for (var i in a) { 
 
    var sliced = a.slice(i + 1); 
 
    console.log(sliced); 
 
}

コンソールログは与える:["one", "two", "three"],[],[],[]

をしかし、私が期待している:だから["one", "two", "three"],["two", "three"],["three"],[]

、私のコードは動作しないのはなぜ?そして私はどのようにコード化すべきですか? ありがとうございました。

+0

? – guest271314

+0

ヒント:実際に '1'、' 2'、 '3'などを確認するために' i + 1'をログしてください。 – Xufox

+2

@Rajesh 'for..in'の反復変数は常に文字列です。 – Xufox

答えて

5

のオブジェクトプロパティをfor...inステートメントが取得するため、文字列を数値に解析する必要があります。したがって、2回目の反復では、a.slice('11')(文字列の連結コード'1' + 1 ==>'11')が空の配列を返します。

var a = ["zero", "one", "two", "three"]; 
 
for (var i in a) { 
 
    var sliced = a.slice(Number(i) + 1); 
 
    console.log(sliced); 
 
}

それは1から始まるカウンタ変数iとforループを使用することをお勧めします配列のため。配列

var a = ["zero", "one", "two", "three"]; 
for (var i = 0; i < a.length; i++) { 
    var sliced = a.slice(i + 1); 
    console.log(sliced); 
} 
+1

プラナフは本当にありがとう!非常にはっきりと説明されました! – Lisa

+0

@Lisa:お手伝いをしてうれしい –

1

使うforループこれは、問題を解決します:

なぜあなたがi+1をやろうとしたのですか?あなたは `for..in`ループを使用しないのはなぜ

var a = ["zero", "one", "two", "three"]; 
 
for (var i in a) { 
 
    var sliced = a.slice(i); 
 
    console.log(sliced); 
 
}

0

を反復処理する

var a = ["zero", "one", "two", "three"]; 
 
for (var i = 1; i < a.length; i++) { 
 
    var sliced = a.slice(i); 
 
    console.log(sliced); 
 
}

+1

希望の出力について質問をしてください。あなたは 'i + 1'の目的を見るでしょう。 – Rajesh

0

var a = ["zero", "one", "two", "three"]; 
 
var i = 0; 
 
while (i = a.length) { 
 
    console.log(a); 
 
    a.shift(); 
 
}

関連する問題