JavaScript配列で、最初の要素を除く最後の5つの要素を取得するにはどうすればよいですか?


197
[1, 55, 77, 88] // ...would return [55, 77, 88]

追加の例を追加:

[1, 55, 77, 88, 99, 22, 33, 44] // ...would return [88, 99, 22, 33, 44]

[1] // ...would return []

1
あなたの例は最後の3つの要素です。仕様をもう少し提供してください。
Jason McCreary、2011年

1
常に最後の5つが欲しいですか?または長さに関わらず、最初の人以外の全員ですか?
ShaneBlake

3
@ジェイソン:彼は最大5つの要素を望んでいます。
SLaks '24年

@ジェイソン、はい、最後の要素(5つまで)が必要です
TIMEX

3
私の答えのように、これはおそらく最もエレガントで最も短い方法ですarr.slice(1).slice(-5)
Belldandu

回答:


337

あなたは呼び出すことができます:

arr.slice(Math.max(arr.length - 5, 1))

最初の要素を除外したくない場合は、

arr.slice(Math.max(arr.length - 5, 0))

8
+1シンプルで便利。さらに、最後の値(1)は0である必要があると思います。このarr.slice(Math.max(arr.length-5、0))は私にとってはうまくいきました。
QMaster、2014年

@TuteCいいえ、ありません。最初の要素も返します。
1

3
または、私の答えのようにチェーンスライスを実行しただけかもしれませんarr.slice(1).slice(-5)>。>。OPが配列の最初の結果を除外したかったため、一部のユーザーはタイトルを読み取れませんでした:|
Belldandu

21
そうじゃないのarr.slice(Math.max(arr.length - 5, 0))
user151496 2016

7
質問には、「最初の要素を除外する」と記載されているため、最後の値はで1あり、はそうではありません0
Don Cruickshank 2016年

68

これは私が見たことがないもので、もっと短いものです

arr.slice(1).slice(-5)

以下のコードスニペットを実行して、目的を達成していることを証明してください

var arr1 = [0, 1, 2, 3, 4, 5, 6, 7],
  arr2 = [0, 1, 2, 3];

document.body.innerHTML = 'ARRAY 1: ' + arr1.slice(1).slice(-5) + '<br/>ARRAY 2: ' + arr2.slice(1).slice(-5);

これを行う別の方法は、lodash https://lodash.com/docs#restを使用することです。これはもちろん、ブラウザーから巨大なjavascript圧縮ファイルをロードする必要がない場合でも問題ありません。

_.slice(_.rest(arr), -5)


29

lodashを使用している場合は、takeRightを使用するとさらに簡単になります。

_.takeRight(arr, 5);


2
配列は、以下の5つの要素を持っている場合、それはまたの世話をする
Devank

11

これを試して:

var array = [1, 55, 77, 88, 76, 59];
var array_last_five;
array_last_five = array.slice(-5);
if (array.length < 6) {
     array_last_five.shift();
}

2
これはユーザーの特定の例でのみ機能します。すなわち、4の長さを有する配列である
ジェイソンMcCreary

いいえ、そうではありません。任意の長さの配列で正常に動作します。-3は、最後の3つの要素が返されることを示します。
アルカ

1
言い換えましょう。コメントから、最後の5つの要素は、最後の3 だけを返します。これが例です。仕様ではありません。
Jason McCreary

1
-1大騒ぎは正しい答えを提供することです。あなたの答えは最後の3つの要素を返すために機能しますが、最初の要素を除いて最後から5つまでの要素を提供するためには機能しません。これはOPの仕様でした。
Jason McCreary

1
繰り返しますが、心配する必要はありませ。SOの主なポイントは、特定のユーザーの質問に対する回答を提供することです。あなたの元の答えはしませんでした。実際、更新はまだ仕様を満たしていません。
Jason McCreary


1

ES6の方法:

配列の構造化割り当てを使用してfirst残りのrest要素を取得し、最後の5つのrestwith sliceメソッドを使用します

const cutOffFirstAndLastFive = (array) => {
  const [first, ...rest] = array;
  return rest.slice(-5);
}

cutOffFirstAndLastFive([1, 55, 77, 88]);

console.log(
  'Tests:',
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88])),
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88, 99, 22, 33, 44])),
  JSON.stringify(cutOffFirstAndLastFive([1]))
);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.