访问 TypeScript 数组的最后一个元素

在 TypeScript 中是否有访问数组最后一个元素的符号?在 Ruby 中,我可以说: array[-1]。有类似的东西吗?

160580 次浏览

You can access the array elements by it's index. The index for the last element in the array will be the length of the array-1 ( as indexes are zero based).

This should work.

var items: String[] = ["tom", "jeff", "sam"];


alert(items[items.length-1])

Here is a working sample.

If you don't need the array afterwards, you could use

array.pop()

But that removes the element from the array!

The pop returns T | undefined so you need to take care of that in your implementation.

If you are sure there will be always a value you can use non-null assertion operator (!):

     var poped = array.pop()
array.push(poped!);

Here is another way which has not yet been mentioned:

items.slice(-1)[0]

Here are a the options summarized together, for anyone finding this question late like me.

var myArray = [1,2,3,4,5,6];


// Fastest method, requires the array is in a variable
myArray[myArray.length - 1];


// Also very fast but it will remove the element from the array also, this may or may
// not matter in your case.
myArray.pop();


// Slowest but very readable and doesn't require a variable
myArray.slice(-1)[0]

If you need this call more often it's possible to declare it globally:

interface Array<T> {
last(): T | undefined;
}
if (!Array.prototype.last) {
Array.prototype.last = function () {
if (!this.length) {
return undefined;
}
return this[this.length - 1];
};
}

then you can just call

items.last()

I'm going with this one as my first contribution to stackoverflow:

var items: String[] = ["tom", "jeff", "sam"];


const lastOne = [...items].pop();

NOTE: Unlike the use of pop() without the spread operator, this approach doesn't remove the last element from the original array.

As of July 2021, browsers are starting to support the at() method for Arrays which allows for the following syntax:

const arr: number[] = [1, 2, 3];


// shows 3
alert(arr.at(-1));

It's not clear to me at what point TypeScript will start to support this (it's not working for me just yet) but it should be available soon I would guess.

Edit: This is available as of typescript@4.5.4

const arr = [1, 3, 6, 2];
console.log(...arr.slice(-1)); // 2