Access last element of a TypeScript array

前端 未结 5 846
走了就别回头了
走了就别回头了 2021-02-06 20:23

Is there a notation to access the last element of an array in TypeScript? In Ruby I can say: array[-1]. Is there something similar?

相关标签:
5条回答
  • 2021-02-06 20:43

    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.

    0 讨论(0)
  • 2021-02-06 20:43

    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!);
    
    0 讨论(0)
  • 2021-02-06 20:43

    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]
    
    0 讨论(0)
  • 2021-02-06 20:44

    Here is another way which has not yet been mentioned:

    items.slice(-1)[0]
    
    0 讨论(0)
  • 2021-02-06 21:06

    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()
    
    0 讨论(0)
提交回复
热议问题