有点奇怪的是,JavaScript Array类没有提供last方法来检索数组的last元素。我知道解决方案很简单(Ar [Ar.length-1]),但是,这仍然太常用了。
尚未合并的任何严重原因?
array[array.length-1]的方式比别人快。
(Ar[Ar.length-1])为我带来20倍的性能提升。
有点奇怪的是,JavaScript Array类没有提供last方法来检索数组的last元素。我知道解决方案很简单(Ar [Ar.length-1]),但是,这仍然太常用了。
尚未合并的任何严重原因?
array[array.length-1]的方式比别人快。
(Ar[Ar.length-1])为我带来20倍的性能提升。
Answers:
因为Javascript的变化非常缓慢。那是因为人们缓慢地升级浏览器。
许多Javascript库都实现了自己的last()功能。用一个!
last()函数。问题是关于Javascript核心语言本身的开发性质。
自己定义很容易。这就是JavaScript的力量。
if(!Array.prototype.last) {
Array.prototype.last = function() {
return this[this.length - 1];
}
}
var arr = [1, 2, 5];
arr.last(); // 5
但是,这可能会导致第三方代码出现问题,该第三方代码(错误地)使用for..in循环遍历数组。
但是,如果您不受浏览器支持问题的束缚,则可以通过使函数不可枚举来使用新的ES5语法定义属性来解决该问题,如下所示:
Object.defineProperty(Array.prototype, 'last', {
enumerable: false,
configurable: true,
get: function() {
return this[this.length - 1];
},
set: undefined
});
var arr = [1, 2, 5];
arr.last; // 5
for..in问题。当然,我们还没有广泛使用ES5,但是现在已经足够了解,因为浏览器正在迅速赶上它,包括IE9。
this.length - 1求值为-1,因为它是一个负数,所以被视为数组属性,而不是元素索引。
另一个选择是,特别是如果您已经在使用UnderscoreJS,则是:
_.last([1, 2, 3, 4]); // Will return 4
Array.prototype.last = Array.prototype.last || function() {
var l = this.length;
return this[l-1];
}
x = [1,2];
alert( x.last() )
null还是undefined?
this[l-1]就可以undefined正常访问不存在的属性。就个人而言,我宁愿JS抛出异常而不是返回undefined,但是JS更喜欢清除错误。
来到这里自己寻找这个问题的答案。切片答案可能是最好的,但是我继续创建了一个“最后一个”功能,只是为了练习扩展原型,所以我想我会继续分享。与其他一些功能相比,它具有更多的好处,它使您可以选择在数组中倒数,然后取出倒数第二个或倒数第三个。如果不指定计数,则默认为1,然后取出最后一项。
Array.prototype.last = Array.prototype.last || function(count) {
count = count || 1;
var length = this.length;
if (count <= length) {
return this[length - count];
} else {
return null;
}
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.last(); // returns 9
arr.last(4); // returns 6
arr.last(9); // returns 1
arr.last(10); // returns null
last(4)或时,last(9)您会失去函数名称的含义,即;last
这是切片最后一个元素的另一种简单方法
var tags = [1, 2, 3, "foo", "bar", "foobar", "barfoo"];
var lastObj = tags.slice(-1);
lastObj现在["barfoo"]。
Python以相同的方式进行操作,当我尝试使用JS时,效果很好。我猜脚本语言中的字符串操作以相同的方式工作。
同样,如果您想要数组中的最后两个对象,
var lastTwoObj = tags.slice(-2)
会给你["foobar", "barfoo"]等等。
pop()方法将弹出最后一个值。但是问题是您将丢失数组中的最后一个值
是的,或者只是:
var arr = [1, 2, 5];
arr.reverse()[0]
如果您需要值,而不是新列表。
item= array.pop();。