配列から要素の範囲を削除しますしかし、結果:JavaScriptの私は、配列から要素の範囲を削除したい
["Banana", "Orange1", "Orangex"]
なぜこれが起こっていますか?
これを行うには、より高速で優れた方法がありますか?
配列から要素の範囲を削除しますしかし、結果:JavaScriptの私は、配列から要素の範囲を削除したい
["Banana", "Orange1", "Orangex"]
なぜこれが起こっていますか?
これを行うには、より高速で優れた方法がありますか?
Array.prototype.splice()の2番目のパラメータは、削除する要素の数であり、終了インデックスではありません。で
パラメータ
start
インデックス(原点0を含む)の配列を変更することを開始する:あなたはそのArray.prototype.splice() MDN Referenceから見ることができます。 が配列の長さより大きい場合、実際の開始インデックスは で、配列の長さに設定されます。負の場合は、配列の終わり(原点1)から多くの 要素を開始し、絶対値が配列の長さより大きい場合は、 0に設定されます。
deleteCount
任意削除する古い配列 の要素の数を示す整数。 deleteCountが0の場合、要素は削除されません。 この場合、少なくとも1つの新しい要素を指定する必要があります。 deleteCount が配列内に残っている要素の数( startから開始)より大きい場合、配列の最後までの要素はすべて、 が削除されます。
ソリューション:
あなたはこれらの二つのインデックス間の要素の数を計算するので、正確な数を取得するためにb-a+1
を使用する必要があります。
デモ:
これはあなたのコードがどうあるべきかです:
var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");
var removedFruits = fruits.splice(a, b-a+1);
console.log(fruits);
ここで、フィルタでそれを行うための一つの方法です:
var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"];
var a = fruits.indexOf("Apple");
var b = fruits.indexOf("Mango");
//returns items not equal to a or b
function fruitfilter(item, index){
return index !== a && index !== b;
}
//apply the filter to the array, returns a new array
var newfruits = fruits.filter(fruitfilter);
//log the new fruits
console.log(newfruits);
はここですAJ sfiddle:link
これは配列のために起こります。()削除する最初のインデックスと要素の数を取るスプライスない最後のインデックス はあなたが正しくスプライス機能を使用していない
fruits.splice(a, b - a + 1);
ことをしてみてください。最初のパラメータはアイテムの数を定義し、2番目のパラメータは開始インデックスです。 – Leth
[第2引数はインデックスではありません] 。 – Cerbrus