2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

久しぶりにArray.splice()を使って混乱した事

Last updated at Posted at 2019-04-04

はじめに

久しぶりに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]
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?