2010-11-29 12 views
6

Javascriptの配列から2番目と3番目の要素をすべて削除します。どのように2番目と3番目の要素をJavascriptの配列から削除しますか?

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10"]; 

は今、私はすべての第二および第三の要素を削除する:

私の配列は、このようになります。結果は次のようになります

["Banana", "Orange", "Apple"] 

Iは、forループおよびスプライスを使用しようとした:ループがまだ実行中の要素が除去されるので、これは空の配列を返すもちろん

for (var i = 0; fruits.length; i = i+3) { 
    fruits.splice(i+1,0); 
    fruits.splice(i+2,0); 
}; 

。 これを正しく行うにはどうすればよいですか?

ありがとうございます。

+0

間違って物事のカップルは特に、あります果物が評価されている間に実行される 'while(fruits)'を実行するのと同じであること1回だけ配列を通過するのではなく、真実です。 – Yahel

答えて

12

から要素をスプライス場合は、別の角度からこの近づく可能性があり、 push()あなたが別の配列に削除したくない値:

var firstFruits = [] 

for (var i = 0; i < fruits.length; i = i+3) { 
    firstFruits.push(fruits[i]); 
}; 

このアプローチはsplice()を使っほど簡潔ではないかもしれないが、私はあなたが読みやすさの面でゲインを参照してくださいと思います。

+0

2番目の配列は、 '' "Banana" "" "" "Orange" "" "" Apple "]' – Robert

+0

@Robertのような配列を生成するので、あなたは絶対に正しいです。私はOPが望む機能性ではないと確信しています。ありがとう、私は最初のものだけを含めるように私の応答を更新します。 – McStretch

+0

うわー、それは簡単です。どうもありがとうございました。 :-) – Bob

0

最初の要素、4番目の要素、7番目の要素を新しい配列にコピーするだけでいいですか?メモリ効率はあまり高くありませんが、それでも問題なく動作します。

1

あなたが逆方向配列内を移動したいと思う

0

逆の順序で配列をループしてみ、そしてi % 2 == 0 || i%3 == 0は、配列

9

これは私のために働く。

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10","Pear","something","else"]; 

for(var i = 0; i < fruits.length; i++) { 
    fruits.splice(i+1,2); 
} 

//fruits = Banana,Orange,Apple,Pear 

ここでそれが少し良く示してデモです:http://jsfiddle.net/RaRR7/

+0

それはまた本当に良いアイデアです、ありがとうございます。 – Bob

1

あなたは、フィルタを使用することができます。

var filtered = [ 
    "Banana", 
    "yellow", 
    "23", 
    "Orange", 
    "orange", 
    "12", 
    "Apple", 
    "green", 
    "10" 
].filter(function(_, i) { 
    return i % 3 === 0; 
}) 

戻り値:

["Banana", "Orange", "Apple"] 
+0

私はフィルターを使用してこのアプローチが好きです。しかし、この場合、 '(i + 1)%3!= 0 &&(i + 1)%2!= 0'は' i%3 === 0'と同じですか?後者ははるかに単純だと思います。 – modulitos

+0

そうです、それは本当です。私は更新します。 –

関連する問題