JavaScript 배열의 마지막 요소 선택
사용자의 위치와 경로를 실시간으로 업데이트하여 구글 지도에 표시하는 앱을 만들고 있습니다.1초마다 갱신되는 오브젝트를 사용하여 여러 사용자를 동시에 추적할 수 있는 기능이 있습니다.
지금은 안드로이드 앱에서 버튼을 누르면 좌표가 데이터베이스로 전송되고 위치가 변경될 때마다 지도에 마커가 업데이트되어 폴리선이 형성됩니다.
복수의 유저가 있기 때문에, 유저 마다 개별의 패스를 표시할 수 있도록, 일의의 랜덤으로 생성된 영숫자 문자열을 송신합니다.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로 저장하는 것입니다.프로그램이 목록에 추가하여 위치를 변경할 때마다 이 목록을 계속 업데이트합니다(이 방법은 올바르게 작동합니다).
제가 해야 할 일은 위치가 바뀔 때마다 마커의 위치를 업데이트하는 것입니다.어레이의 마지막 아이템이 마지막이기 때문에 그것을 선택하고 싶습니다.현재 위치가 변경될 때마다 지도에 새 마커가 추가되므로(예제의 각 포인트는 해당 위치의 마커를 표시함) 마커가 계속 추가됩니다.
로케이션이 갱신될 때마다 포(x in loc) 문을 사용하여 목록에서 마지막 위치를 가져와 마커를 갱신합니다.해시 내의 어레이에서 이 마지막 요소를 선택하려면 어떻게 해야 합니까?
어레이의 마지막 요소에 액세스하는 방법
다음과 같습니다.
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/ 를 참조해 주세요.
를 사용합니다.slice()방법:
my_array.slice(-1)[0]
할 수도 있습니다..pop마지막 요소에서 벗어납니다.이렇게 하면 어레이의 값이 변경되지만 이 경우에도 문제가 없을 수 있습니다.
var a = [1,2,3];
a.pop(); // 3
a // [1,2]
확산 연산자와 함께 es6 탈구축 배열 사용
var last = [...yourArray].pop();
어레이는 변경되지 않습니다.
var arr = [1, 2, 3];
arr.slice(-1).pop(); // return 3 and arr = [1, 2, 3]
어레이가 비어 있으면 정의되지 않은 상태로 반환되며 어레이 값이 변경되지 않습니다.
언더스코어 및 Lodash는_.last(Array)method: 배열의 마지막 요소를 반환합니다.둘 다 비슷한 일을 한다.
_.last([5, 4, 3, 2, 1]);
=> 1
Ramda는 또한_.last기능.
R.last(['fi', 'fo', 'fum']); //=> 'fum'
var last = array.slice(-1)[0];
마지막 요소(특히 길이를 알 수 없는 배열)를 얻는 데 -1의 슬라이스가 유용하고, 그 길이를 1로 줄이는 것보다 성능이 훨씬 우수하다는 것을 알게 되었습니다.
이것은 효과가 있었다:
array.reverse()[0]
Getter를 정의할 수 있습니다.Array.prototype:
if (!Array.prototype.hasOwnProperty("last")) {
Object.defineProperty(Array.prototype, "last", {
get() {
return this[this.length - 1];
}
});
}
console.log([9, 8, 7, 6].last); // => 6
보시다시피, 액세스는 함수 호출처럼 보이지 않습니다.게터 함수는 내부적으로 호출됩니다.
그래서 많은 사람들이 팝으로 대답하고 있지만 대부분은 그것이 파괴적인 방법이라는 것을 깨닫지 못하고 있는 것 같다.
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] => 정의되어 있지 않습니다(이 정도의 깊이는 여기서 끝나는 모든 불운한 뉴브에 대한 것입니다).
트래픽, 커플, blah 등, 애플리케이션에 최적인, 또는 좋은 방법은 아닐지도 모릅니다.어레이를 가로 질러 다른 어레이로 스트리밍 하는 것은 비효율적인 방법으로 바보 같은 것입니다.완전 이거예요.
ES6를 사용하는 경우 다음을 수행할 수 있습니다.
const arr = [ 1, 2, 3 ];
[ ...arr ].pop(); // 3
arr; // [ 1, 2, 3 ] (wasn't changed)
응용 프로그램에 중요한 경우 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);
var last = function( obj, key ) {
var a = obj[key];
return a[a.length - 1];
};
last(loc, 'f096012e-2497-485d-8adb-7ec0b9352c52');
언급URL : https://stackoverflow.com/questions/9050345/selecting-last-element-in-javascript-array
'programing' 카테고리의 다른 글
| 끈을 피한다는 게 무슨 뜻이죠? (0) | 2023.02.02 |
|---|---|
| 인터페이스의 모든 필드가 암묵적으로 스태틱하고 최종적인 이유는 무엇입니까? (0) | 2023.02.02 |
| MySQL vs MariadB:일반 오류: 1205 잠금 대기 시간 초과. 트랜잭션을 다시 시작해 보십시오. (0) | 2023.02.02 |
| Django DB를 SQLite에서 MySQL로 마이그레이션하는 가장 좋은 방법은 무엇입니까? (0) | 2023.02.02 |
| Vue 속성이 밑줄과 함께 유효하지 않습니다. (0) | 2023.01.13 |