Help us understand the problem. What is going on with this article?

JavaScript で配列の最後の要素を取得するもう一つの方法

array[array.length - 1]array.pop() にはいくつかのデメリットがあり、使いづらいことがありますが、もう一つ良さそうな方法がありました。

  • array[array.length - 1]
    • メリット
      • (おそらく) 実行時間が一番短い (未検証)
    • デメリット
      • したいことの割に記述が長く、複雑なコード上では可読性が下がる
      • array という識別子を 2 重に記述することで、バグの原因になる可能性がある
      • 構文の都合上、何らかの計算結果で得た配列に対して用いるとき、一旦変数に代入しなければならない (メソッドチェーンで記述することができない)
  • array.pop()
    • メリット
      • コードを簡潔に記述することができ、ひとがコードを見て意味を理解しやすい
      • メソッドチェーンで記述することができる
    • デメリット
      • 元の配列が破壊される (それを目的とする場合はデメリットでない)

1. array.slice(-1)[0]

const array = [1, 2, 3, 4, 5];

const last = array.slice(-1)[0]; // ★これ

console.log({array, last}); // array: [1, 2, 3, 4, 5], last: 5

splice() ではなく slice() です。

slice() は配列の一部を新しい配列として取り出すことができるメソッドで、第一引数をマイナスにすると後ろからその要素数だけ取得します。
返り値の型は配列なので、[0] でスカラー値にしています。

  • array.slice(-1)[0]
    • メリット
      • コードを簡潔に記述することができ、ひとがコードを見てそこそこ意味を理解しやすい
      • メソッドチェーンで記述することができる
    • デメリット
      • (特になし)
      • しいて言えば、array[array.length - 1] より実行速度が遅い可能性あり (未検証)

2. 配列いろいろ

念のため、空配列などの場合にどう動作するか確認しました。

// 普通の配列
const array1 = [1, 2, 3, 4, 5];
array1[array1.length - 1]; // 5
array1.slice(-1)[0]; // 5
array1.pop(); // 5

// 文字列
const array2 = '12345';
array2[array2.length - 1]; // '5'
array2.slice(-1)[0]; // '5'
array2.pop(); // (TypeError)

// 空配列
const array3 = [];
array3[array3.length - 1]; // undefined
array3.slice(-1)[0]; // undefined
array3.pop(); // undefined

// null, undefined
const array4 = null;
array4[array4.length - 1]; // (TypeError)
array4.slice(-1)[0]; // (TypeError)
array4.pop(); // (TypeError)

array[array.length - 1] が使える場面なら array.slice(-1)[0] を使って大丈夫そうです。

kerupani129
趣味でのんびりやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした