python取数组最后一个元素_选择JavaScript数组中的最后一个元素

选择JavaScript数组中的最后一个元素

这个问题在这里已有答案:

获取数组中的最后一项                                     37个答案

我正在制作一个实时更新用户位置和路径的应用程序,并在Google地图上显示。 我的功能允许使用每秒更新一次的对象同时跟踪多个用户。

现在,当用户按下Android应用程序中的按钮时,坐标将被发送到数据库,每次位置更改时,都会在地图上更新标记(并形成折线)。

由于我有多个用户,因此我会发送一个唯一且随机生成的字母数字字符串,以便为每个用户显示单独的路径。 当JS从数据库中提取此数据时,它会检查用户是否存在,如果不存在,则会创建一个值为列表的新密钥。 它看起来像这样:

loc = {f096012e-2497-485d-8adb-7ec0b9352c52: [new google.maps.LatLng(39, -86),

new google.maps.LatLng(38, -87),

new google.maps.LatLng(37, -88)],

44ed0662-1a9e-4c0e-9920-106258dcc3e7: [new google.maps.LatLng(40, -83),

new google.maps.LatLng(41, -82),

new google.maps.LatLng(42, -81)]}

我正在做的是存储一个坐标列表作为键的值,这是用户的ID。 每次更改位置时,我的程序会通过添加到列表来更新此列表(这可以正常工作)。

我需要做的是每次位置更改时更新标记的位置。 我想通过选择数组中的最后一项来做到这一点,因为那将是最后一个已知的位置。 现在,每次更改位置时,都会向地图添加一个新标记(示例中的每个点都会在该位置显示标记),因此继续添加标记。

每次位置更新时,我会使用'for(x in loc)`语句从列表中获取最后一个位置并使用它来更新标记。 如何在哈希中从数组中选择最后一个元素?

13个解决方案

638 votes

如何访问数组的最后一个元素

它看起来像这样:

var my_array = /* some array here */;

var last_element = my_array[my_array.length - 1];

在您的情况下,这看起来像这样:

var array1 = loc['f096012e-2497-485d-8adb-7ec0b9352c52'];

var last_element = array1[array1.length - 1];

或者,在更长的版本中,不创建新变量:

loc['f096012e-2497-485d-8adb-7ec0b9352c52'][loc['f096012e-2497-485d-8adb-7ec0b9352c52'].length - 1];

如何添加一种简化方法

如果您是创建功能/快捷方式以完成此类任务的粉丝,请使用以下代码:

if (!Array.prototype.last){

Array.prototype.last = function(){

return this[this.length - 1];

};

};

将允许您通过调用数组的last()方法获取数组的最后一个元素,例如:

loc['f096012e-2497-485d-8adb-7ec0b9352c52'].last();

你可以在这里查看它的工作原理:[http://jsfiddle.net/D4NRN/]

Tadeck answered 2019-03-31T20:19:53Z

322 votes

使用slice()方法:

my_array.slice(-1)[0]

Datageek answered 2019-03-31T20:20:17Z

94 votes

你也可以关闭最后一个元素.pop。 小心,这会改变数组的值,但这对你来说可能没问题。

var a = [1,2,3];

a.pop(); // 3

a // [1,2]

Josh answered 2019-03-31T20:20:41Z

29 votes

var arr = [1, 2, 3];

arr.slice(-1).pop(); // return 3 and arr = [1, 2, 3]

如果数组为空,这将返回undefined,这不会更改数组的值。

Nery Jr answered 2019-03-31T20:21:05Z

25 votes

将es6解构数组与扩展运算符一起使用

var last = [...yourArray].pop();

请注意,yourArray不会更改。

hamecoded answered 2019-03-31T20:21:42Z

17 votes

var last = array.slice(-1)[0];

我发现-1处的切片对于获取最后一个元素(特别是未知长度的数组)非常有用,并且性能比计算长度减去1要好得多。

片上的Mozilla文档

用于选择最后一个数组元素的各种方法的性能

amay0048 answered 2019-03-31T20:22:19Z

15 votes

Underscore和Lodash具有_.last(Array)方法,该方法返回Array中的最后一个元素。 他们都是一样的

_.last([5, 4, 3, 2, 1]);

=> 1

Ramda还具有_.last功能

R.last(['fi', 'fo', 'fum']); //=> 'fum'

svarog answered 2019-03-31T20:22:50Z

11 votes

如果这对您的应用程序至关重要,请使用JavaScript对象。 您不应该使用原始基元来管理应用程序的关键部分。 由于这似乎是您的应用程序的核心,您应该使用对象。 我在下面写了一些代码来帮助你入门。 方法lastLocation将返回最后位置。

function User(id) {

this.id = id;

this.locations = [];

this.getId = function() {

return this.id;

};

this.addLocation = function(latitude, longitude) {

this.locations[this.locations.length] = new google.maps.LatLng(latitude, longitude);

};

this.lastLocation = function() {

return this.locations[this.locations.length - 1];

};

this.removeLastLocation = function() {

return this.locations.pop();

};

}

function Users() {

this.users = {};

this.generateId = function() {

return Math.random();

};

this.createUser = function() {

var id = this.generateId();

this.users[id] = new User(id);

return this.users[id];

};

this.getUser = function(id) {

return this.users[id];

};

this.removeUser = function(id) {

var user = this.getUser(id);

delete this.users[id];

return user;

};

}

var users = new Users();

var user = users.createUser();

user.addLocation(0, 0);

user.addLocation(0, 1);

Levi Morrison answered 2019-03-31T20:23:16Z

8 votes

您可以在Array.prototype上定义一个getter:

if (!Array.prototype.hasOwnProperty("last")) {

Object.defineProperty(Array.prototype, "last", {

get: function() {

return this[this.length - 1];

}

});

}

console.log([9, 8, 7, 6].last); // => 6

如您所见,访问看起来不像函数调用; getter函数在内部调用。

XåpplI'-I0llwlg'I - answered 2019-03-31T20:23:49Z

5 votes

如果您使用ES6,您可以:

const arr = [ 1, 2, 3 ];

[ ...arr ].pop(); // 3

arr; // [ 1, 2, 3 ] (wasn't changed)

Mykhailo Zhuk answered 2019-03-31T20:24:15Z

5 votes

这工作:

array.reverse()[0]

Sreerag answered 2019-03-31T20:24:36Z

4 votes

var last = function( obj, key ) {

var a = obj[key];

return a[a.length - 1];

};

last(loc, 'f096012e-2497-485d-8adb-7ec0b9352c52');

zellio answered 2019-03-31T20:24:55Z

4 votes

所以,很多人都在回答pop(),但是他们中的大多数人似乎并没有意识到这是一种破坏性的方法。

var a = [1,2,3]

a.pop()

//3

//a is now [1,2]

所以,对于一个非常愚蠢,非破坏性的方法:

var a = [1,2,3]

a[a.push(a.pop())-1]

//3

推出流行音乐,就像在90年代:)

push将值附加到数组的末尾,并返回结果的长度。 所以

d=[]

d.push('life')

//=> 1

d

//=>['life']

pop返回数组的最后一项的值,然后在该索引处删除该值。 所以

c = [1,2,1]

c.pop()

//=> 1

c

//=> [1,2]

数组是0索引的,所以c.length => 3,c [c.length] => undefined(因为你正在寻找第四个值,如果你这样做(这个深度级别适用于最终在这里的任何不幸的新手))。

对于你的应用来说,可能不是最好的,甚至是一个好的方法,交通,流失,等等。 但是为了遍历一个数组,将它流式传输到另一个数组,只是用低效的方法愚蠢,这个。 完全是这个。

Ryan Wood answered 2019-03-31T20:26:00Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值