2

http://jsfiddle.net/4wKuj/8/

  var myarr=new Array("Saab","Volvo","BMW");       
  console.log(myarr);
  for (var i=0; i<myarr.length; i++) {
    myarr.splice(i,1);
  }
  console.log(myarr);

注:実際の実装では、配列を空にしようとはしていないため、plzは配列を空にする他の方法を提案していません。

コンソールログにまだ「volvo」が表示されるのはなぜですか?

他と同じように、それも削除されるべきではありませんか?

ありがとうございました

4

4 に答える 4

5

それが何をするか:

  • 最初の反復、、i=0削​​除"Saab"、=>配列は["Volvo","BMW"]
  • 2番目の反復、、i=1は削除"BMW"されます。これは、インデックスにあるものだからです。1
于 2012-12-01T12:04:04.713 に答える
1

最初の接合後:

i = 1
myarr = ["Volvo", "BMW"]

したがって、削除され"BMW"ます。2 番目のスプライス後:

i = 2
myarr = ["Volvo"]

そしてループは続きません。次のようにするとよいでしょう:

while (myarr.length > 1) {
    myarr.splice(0, 1);
}
于 2012-12-01T12:07:40.903 に答える
0

ループの前に、配列は次のようになります

["サーブ"、 "ボルボ"、 "BMW"]

ループの最初の反復の後、配列の最初の要素を削除すると、配列は次のようになります。

["ボルボ"、 "BMW"]

2回目の反復中、「i」変数には、配列の2番目の要素に対応する「1」(1)の値があります。つまり、次のようになります。

インデックス「1」の["Volvo"、"BMW"]配列要素を削除します

于 2012-12-01T12:06:05.080 に答える
0

配列からアイテムを削除する場合は、インデックス値 f.ex も調整する必要があります。

var myarr=new Array("Saab","Volvo","BMW");       
for (var i=0; i<myarr.length; i++) {
  myarr.splice(i--,1);
}

ヒント: 値に基づいて配列から項目を削除するループを使用している場合は、他のメソッド f.ex を使用できますArray.filter

myarr = myarr.filter(function(val) {
    return val !== 'Volvo'
});

Array.indexOfも思い浮かびます。

于 2012-12-01T12:13:37.987 に答える