Reputation: 271614
In a JavaScript array, how do I get the last 5 elements, excluding the first element?
[1, 55, 77, 88] // ...would return [55, 77, 88]
adding additional examples:
[1, 55, 77, 88, 99, 22, 33, 44] // ...would return [88, 99, 22, 33, 44]
[1] // ...would return []
Upvotes: 332
Views: 311736
Reputation: 2382
Here is one I haven't seen that's even shorter
arr.slice(1).slice(-5)
Run the code snippet below for proof of it doing what you want
const arr = [];
for (let i = 0; i < 8; i++) {
arr.push(i);
console.log(`Array ${i + 1}: ${arr} -> ${arr.slice(1).slice(-5)}`);
}
Another way to do it would be using lodash https://lodash.com/docs#rest - that is of course if you don't mind having to load a huge JavaScript minified file if you're trying to do it from your browser.
_.slice(_.rest(arr), -5)
Upvotes: 151
Reputation: 2474
Beginner solution:
var givme = function(n) {
if(n.length == 1) {
return [];
}
if(n.length > 5) {
return n.slice(n.length-5, n.length);
}
if(n.length <= 5) {
return n.slice(1, n.length);
}
}
// console.log(givme([1, 55, 77, 88, 99, 22, 33, 44]));
Upvotes: 0
Reputation: 45
array.reverse()
.slice(0,5)
.reverse() //if you wanna keep the order of last 5
const myOriginalArray = [...Array(10).keys()] //making an array of numbers
const instanceFromlastFiveItemsOfMyArray = [
...myOriginalArray.reverse().slice(0,5).reverse()
]
Upvotes: -1
Reputation: 726
You can do it in one line like this:
const y = [1,2,3,4,5,6,7,8,9,10];
const lastX = 5;
const res = y.filter((val, index, arr) => index > arr.length - lastX - 1);
console.log(res);
.filter((val, index, arr) => index > arr.length - 6)
Upvotes: 5
Reputation: 5048
ES6 way:
I use destructuring assignment for array to get first
and remaining rest
elements and then I'll take last five of the rest
with slice method:
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]))
);
Upvotes: 7
Reputation: 405
var y = [1,2,3,4,5,6,7,8,9,10];
console.log(y.slice((y.length - 5), y.length))
you can do this!
Upvotes: 16
Reputation: 887255
You can call:
arr.slice(Math.max(arr.length - 5, 1))
If you don't want to exclude the first element, use
arr.slice(Math.max(arr.length - 5, 0))
Upvotes: 517
Reputation: 2933
If you are using lodash, its even simpler with takeRight.
_.takeRight(arr, 5);
Upvotes: 44
Reputation: 837
Try this:
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();
}
Upvotes: 14