はじめに
久しぶりにArray.splice()使ってちょっと混乱してしまいました。
思惑通りの操作は直ぐに出来たのですが、MSN等に載っている関数の説明が間違っているのではとしばらく考えてしまいました。
結果、自分の勘違いでした。
単純な事ですがメモとして残しておこうと思います。
Array.prototype.splice()の簡単な説明
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
Start :
開始位置。
負の場合、array.length - n から開始。
開始位置の要素も削除の対象になる。
deleteCount :
削除する要素の数。
省略した場合、Start以降の要素を削除する。
0または負の場合、何も削除されない。
item1, item2 : この記事では、使わないので省略。
勘違いした記述
末尾から4つ消そうと以下のように書いてしまった。
javascript
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-1, 4);
console.log(array);
// [1, 2, 3, 4, 5, 6, 7, 8, 9];
この記述では、末尾の1つしか削除されません。
動作をしっかり理解すると当然なのが分かります。
末尾から開始して(右側の)4つ要素を削除するとなります。
末尾の後に続く要素は当然ありませんので、末尾1つしか削除されません。
この場合、以下のようにすると想定通りの動きになります。
javascript
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-4, 4);
console.log(array);
// [1, 2, 3, 4, 5, 6];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-4);
console.log(array);
// [1, 2, 3, 4, 5, 6];
削除する方向が右側固定なのが肝でしたね。
その他の動作結果
javascript
let array = [];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(0, 1);
console.log(array);
// [2, 3, 4, 5, 6, 7, 8, 9, 0];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(0, 4);
console.log(array);
// [5, 6, 7, 8, 9, 0];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(4, 1);
console.log(array);
// [1, 2, 3, 4, 6, 7, 8, 9, 0];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(4, 4);
console.log(array);
// [1, 2, 3, 4, 9, 0];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-1, 1);
console.log(array);
// [1, 2, 3, 4, 5, 6, 7, 8, 9];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-4, 1);
console.log(array);
// [1, 2, 3, 4, 5, 6, 8, 9, 0];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-4, 4);
console.log(array);
// [1, 2, 3, 4, 5, 6];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(0);
console.log(array);
// [];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(4);
console.log(array);
// [1, 2, 3, 4];
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-1);
console.log(array);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
array.splice(-4);
console.log(array);
// [1, 2, 3, 4, 5, 6]