배열의 마지막 항목 가져오기
지금까지의 JavaScript 코드는 다음과 같습니다.
var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2])));
linkElement.appendChild(newT);
두 항목까지 URL에서 . 단,이 URL이 되는 ."index.html"
만약 그렇다면, 세 번째에서 마지막 항목을 대신 잡으세요.
if (loc_array[loc_array.length - 1] === 'index.html') {
// do something
} else {
// something else
}
가 " "inDEX대해 "index.html" "inDEX.htML" 을 사용할 ..toLowerCase()
.
단, 가능하면 이 서버측을 검토하는 것이 좋습니다.JS가 없는 사용자에게는 더 깔끔하고 효과적입니다.
편집 - ES-2022
ES-2022 를 사용하면, 다음과 같이 기술할 수 있습니다.
if (loc_array.at(-1) === 'index.html') {
// do something
} else {
// something else
}
결점이 있는지는 모르겠지만, 이것은 꽤 간결해 보입니다.
arr.slice(-1)[0]
또는
arr.slice(-1).pop()
다 undefined
어레이가 비어 있는 경우.
Array.pop 사용:
var lastItem = anArray.pop();
중요: 마지막 요소를 반환하고 어레이에서 제거합니다.
@chaiguy가 게시한 내용을 간략히 정리한 것입니다.
Array.prototype.last = function() {
return this[this.length - 1];
}
-1이 반환됩니다.undefined
★★★★★★ 。
편집:
요즘은 모듈을 사용하는 것이 선호되고 프로토타입에 손을 대거나 글로벌 네임스페이스를 사용하는 것을 피하는 것이 선호되는 것 같습니다.
export function last(array) {
return array[array.length - 1];
}
다음 두 가지 옵션이 있습니다.
var last = arr[arr.length - 1]
또는
var last = arr.slice(-1)[0]
전자가 더 빠르지만 후자가 더 좋아 보인다.
http://jsperf.com/slice-vs-length-1-arr
성능
현재 2020.05.16 MacOS High Sierra v10.13.6에서 Chrome v81.0, Safari v13.1 및 Firefox v76.0에서 선택한 솔루션의 테스트를 수행합니다.
결론들
arr[arr.length-1]
(는 가장 빠른 솔루션(D)으로- 솔루션
arr.pop()
및 (A)_.last(arr)
(L) 속 - 솔루션 I, J는 긴 문자열 동안 느리다
- 솔루션 H, K(jQuery)가 모든 브라우저에서 가장 느리다
세부 사항
솔루션을 테스트하는 경우는 다음 두 가지입니다.
두 가지 경우에 대해서
function A(arr) {
return arr.pop();
}
function B(arr) {
return arr.splice(-1,1);
}
function C(arr) {
return arr.reverse()[0]
}
function D(arr) {
return arr[arr.length - 1];
}
function E(arr) {
return arr.slice(-1)[0] ;
}
function F(arr) {
let [last] = arr.slice(-1);
return last;
}
function G(arr) {
return arr.slice(-1).pop();
}
function H(arr) {
return [...arr].pop();
}
function I(arr) {
return arr.reduceRight(a => a);
}
function J(arr) {
return arr.find((e,i,a)=> a.length==i+1);
}
function K(arr) {
return $(arr).get(-1);
}
function L(arr) {
return _.last(arr);
}
function M(arr) {
return _.nth(arr, -1);
}
// ----------
// TEST
// ----------
let loc_array=["domain","a","b","c","d","e","f","g","h","file"];
log = (f)=> console.log(`${f.name}: ${f([...loc_array])}`);
[A,B,C,D,E,F,G,H,I,J,K,L,M].forEach(f=> log(f));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js" integrity="sha256-VeNaFBVDhoX3H+gJ37DpT/nTuZTdjYro9yBruHjVmoQ=" crossorigin="anonymous"></script>
짧은 문자열에 대한 Chrome의 결과 예
원래의 어레이에 영향을 주지 않고 입수하는 방법
a = [1,2,5,6,1,874,98,"abc"];
a.length; //returns 8 elements
pop()을 사용하면 어레이가 변경됩니다.
a.pop(); // will return "abc" AND REMOVES IT from the array
a.length; // returns 7
그러나 원래 어레이에 영향을 주지 않도록 다음과 같이 사용할 수 있습니다.
a.slice(-1).pop(); // will return "abc" won't do modify the array
// because slice creates a new array object
a.length; // returns 8; no modification and you've got you last element
가장 깨끗한 ES6 방식(IMO)은 다음과 같습니다.
const foo = [1,2,3,4];
const bar = [...foo].pop();
하면 변이를 수 있습니다.foo
~로.pop()
우리가 스프레드 연산자를 사용하지 않았다면 그랬을 거야
하지만,는 '', '아까', '아까'foo.slice(-1)[0]
★★★★★★★★★★★★★★★★★★.
const [lastItem] = array.slice(-1);
Array.protype.-1 슬라이스를 사용하여 원래 어레이의 마지막 항목만 포함하는 새 어레이를 만든 다음 Destructuring Assignment를 사용하여 새 어레이의 첫 번째 항목을 사용하여 변수를 만들 수 있습니다.
const lotteryNumbers = [12, 16, 4, 33, 41, 22];
const [lastNumber] = lotteryNumbers.slice(-1);
console.log(lotteryNumbers.slice(-1));
// => [22]
console.log(lastNumber);
// => 22
const [y] = x.slice(-1)
간단한 설명:
구문 " " "
[y] = <array/object>
destructing assignment라고 불리며, Mozilla documents에 따르면 destructing assignment를 사용하면 어레이 또는 속성에서 값을 다른 변수로 언팩할 수 있습니다.자세한 내용은 이쪽
차라리 사용하는게 낫겠다.array.pop()
츠키다
while(loc_array.pop()!= "index.html"){
}
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length])));
이렇게 하면 항상 index.display 이전 요소를 얻을 수 있습니다(배열에는 격리된 index.display가1개의 항목으로 포함되어 있습니다).주의: 단, 어레이의 마지막 요소는 손실됩니다.
에 상대 인덱스를 사용할 수 있습니다.
const myArray = [1, 2, 3]
console.log(myArray.at(-1))
// => 3
const lastElement = myArray[myArray.length - 1];
에서는, 「1000」보다 ).arr.slice(-1)
를 참조해 주세요.
이 패턴을 사용할 수 있습니다.
let [last] = arr.slice(-1);
읽기 쉽지만 새로운 어레이가 생성되므로 다른 솔루션보다 효율은 떨어지지만 애플리케이션의 성능 병목현상은 거의 발생하지 않습니다.
마지막 요소를 한 번에 가져오려면 다음을 사용할 수 있습니다.
lastElement = document.location.href.split('/').splice(-1,1);
여기서 분할 요소를 배열에 저장한 후 마지막 요소로 이동할 필요가 없습니다.마지막 요소를 얻는 것이 유일한 목표인 경우 이 방법을 사용해야 합니다.
메모: 그러면 원래 배열의 마지막 요소가 제거되어 원래 배열이것에 의해, 원래의 어레이가 변경됩니다.을 생각하다splice(-1,1)
로 pop()
마지막 요소를 터트리는 함수입니다.
javascript에서 배열의 마지막 값을 찾는 여러 가지 방법
- 원래 어레이에 영향을 주지 않음
var arr = [1,2,3,4,5];
console.log(arr.slice(-1)[0])
console.log(arr[arr.length-1])
const [last] = [...arr].reverse();
console.log(last)
let copyArr = [...arr];
console.log(copyArr.reverse()[0]);
- 원래 어레이를 변경합니다.
var arr = [1,2,3,4,5];
console.log(arr.pop())
arr.push(5)
console.log(...arr.splice(-1));
- 자체 도우미 메서드 생성
let arr = [1, 2, 3, 4, 5];
Object.defineProperty(arr, 'last',
{ get: function(){
return this[this.length-1];
}
})
console.log(arr.last);
음수 값을 가진 슬라이스 방법을 사용하면 배열의 마지막 항목을 가져올 수 있습니다.
자세한 내용은 아래를 참조하십시오.
var fileName = loc_array.slice(-1)[0];
if(fileName.toLowerCase() == "index.html")
{
//your code...
}
pop()을 사용하면 배열이 변경되지만 항상 좋은 생각은 아닙니다.
은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★length
되므로 0을 을 선택할 수 .array.length - 1
const arr = [1,2,3,4];
const last = arr[arr.length - 1];
console.log(last); // 4
하는 것입니다.Array.prototype.at()
정수 값을 사용하여 해당 인덱스의 항목을 반환하는 메서드입니다. 항목을 그냥 시킬 수 .-1
const arr = [1,2,3,4];
const last = arr.at(-1);
console.log(last); // 4
하는 것입니다.findLast
방법.제안서는 이쪽에서 보실 수 있습니다.
const arr = [1,2,3,4];
const last = arr.findLast(x => true);
console.log(last); // 4
하나의 은 '보다 낫다'를 입니다.Array.prototype.slice()
배열 부분의 얕은 복사본을 새 배열 개체로 반환하는 메서드입니다.
const arr = [1,2,3,4];
const last = arr.slice(-1)[0];
console.log(last); // 4
이기 때문에, 아무도 것에 언급하지 이 놀랍습니다.pop()
.
arr.pop()
에 필적하는 효율입니다.arr[arr.length-1]
다 같은 arr.push()
.
그 때문에, 다음과 같이 회피할 수 있습니다.
---EDITED ] - EDITED [ 인] ]thePop
그래undefined
pushing ------ 、 [ ]---
let thePop = arr.pop()
thePop && arr.push(thePop)
---편집 종료---
이 속도까지 줄일 수 있습니다(같은 속도 [EDIT: 그러나 안전하지 않음]).
arr.push(thePop = arr.pop()) //Unsafe if arr empty
, 느리다, 2배 .arr[arr.length-1]
인덱스를 사용할 필요는 없습니다.건건 、 아나나나때있 어어있 。
중 몇 가지와 , 그리고 실행 시간 단위(ETU)의 배수로,arr[arr.length-1]
:
[방법] ............[ETU 5 elems][ETU 100만 elems]
arr[arr.length - 1] ------> 1 -----> 1
let myPop = arr.pop()
arr.push(myPop) ------> 2 -----> 2
arr.slice(-1).pop() ------> 36 -----> 924
arr.slice(-1)[0] ------> 36 -----> 924
[...arr].pop() ------> 120 -----> ~21,000,000 :)
옵션, 3가지 옵션.[...arr].pop()
어레이의 사이즈가 커질수록, 매우 악화됩니다. 머신의, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」[...arr].pop()
120:1입니다.그래도 자원 호그를 좋아하는 사람은 없습니다.
여기에 다른 옵션을 넣겠습니다.
loc_array.splice(-1)[0] === 'index.html'
위의 접근법이 더 깔끔하고 짧았다.마음껏 드셔보세요.
배열이 경우 ":"를 사용할 수 .을 사용법slice()
loc_array.slice(-1)[0] === 'index.html'
ES6 객체 파괴는 또 다른 방법입니다.
const {length, [length-1]: last}=[1,2,3,4,5]
console.log(last)
객체 파괴를 사용하여 어레이에서 길이 속성을 추출합니다.이미 추출된 [length-1]의 키를 사용하여 다른 동적 키를 생성하여 마지막에 할당합니다.모두 한 줄입니다.
어레이 프로토타입에 과부하가 걸리는 것을 두려워하지 않는 사용자(및 열거형 마스킹으로 인한 과부하 방지):
Object.defineProperty( Array.prototype, "getLast", {
enumerable: false,
configurable: false,
writable: false,
value: function() {
return this[ this.length - 1 ];
}
} );
여기 Javascript art를 찾으러 왔다면 더 많은 Javascript art가 있습니다.
으로.reduceRight()
: , ", ":
[3, 2, 1, 5].reduceRight(a => a);
초기값을 제공하지 않는 경우 마지막 요소가 초기값으로 선택된다는 사실에 의존합니다(여기에서 문서를 확인하십시오).콜백은 초기값을 계속 반환하기 때문에 마지막 요소는 마지막에 반환되는 요소가 됩니다.
이것은 Javascript art로 간주되어야 하며, O(n)시간 내에 실행되기 때문에 절대 권장하지 않는 방법이며, 가독성을 해치기 때문에 주의하시기 바랍니다.
그리고 이제 진지한 대답을 하자면
보기엔 좋은 (당신이 것을 한다면 더 수 있습니다.)array[array.length - 1]
는 다음과 같습니다
const last = a => a[a.length - 1];
그런 다음 다음 기능을 사용합니다.
last([3, 2, 1, 5])
은 실제로 '어느새 하다'와 같은 때 합니다.[3, 2, 1, 5]
위에서 사용한 경우 두 번 인스턴스화해야 하므로 비효율적이고 보기 흉할 수 있습니다.
[3, 2, 1, 5][[3, 2, 1, 5].length - 1]
에휴.
를 들어, " " " " " " " " " " 를 사용할 수 .last()
★★★★
last("1.2.3".split("."));
저는 보통 언더스코어를 사용합니다.그걸로 하면 돼요.
if (_.last(loc_array) === 'index.html'){
etc...
}
은 '의미적'보다 더 이다.loc_array.slice(-1)[0]
jQuery는 이 문제를 깔끔하게 해결합니다.
> $([1,2,3]).get(-1)
3
> $([]).get(-1)
undefined
오리진 어레이에서 마지막 항목을 삭제하지 않도록 하려면
Array.from(myArray).pop()
대부분 모든 브라우저 지원(ES6)
ECMAScript 제안 Stage 1에서는 마지막 요소 proposal-array-last를 반환하는 어레이 속성을 추가할 것을 제안합니다.
구문:
arr.lastItem // get last item
arr.lastItem = 'value' // set last item
arr.lastIndex // get last index
폴리필을 사용할 수 있습니다.
제안서 작성자: Keith Cirkel (chai autor)
이게 잘 될 것 같아요.
var arr = [1, 2, 3];
var last_element = arr.reverse()[0];
어레이를 반대로 하면 첫 번째 요소를 얻을 수 있습니다.
편집: 아래 설명과 같이 원래 어레이가 반전됩니다.이를 방지하기 위해 코드를 다음과 같이 변경할 수 있습니다.
var arr = [1, 2, 3];
var last_element = arr.slice().reverse()[0];
그러면 원래 어레이의 복사본이 생성됩니다.
개인적으로 나는 Kuporific/kritzikratzi로 답변을 상향 투표할 것이다.중첩된 어레이를 사용하는 경우 array[array.length-1] 방식은 매우 어려워집니다.
var array = [[1,2,3], [4,5,6], [7,8,9]]
array.slice(-1)[0]
//instead of
array[array.length-1]
//Much easier to read with nested arrays
array.slice(-1)[0].slice(-1)[0]
//instead of
array[array.length-1][array[array.length-1].length-1]
뭘 하든 그냥 쓰지 말고reverse()
에 몇몇음음음음음음음음음 a a a a a a a a a a a가 언급되어 있다.reverse
그 reverse
는 원래 어레이를 변경하지만 (다른 언어 또는 프레임워크와 마찬가지로) 복사본을 반환하지 않습니다.
var animals = ['dog', 'cat'];
animals.reverse()[0]
"cat"
animals.reverse()[0]
"dog"
animals.reverse()[1]
"dog"
animals.reverse()[1]
"cat"
이것은 디버깅하기 가장 나쁜 유형의 코드일 수 있습니다.
언급URL : https://stackoverflow.com/questions/3216013/get-the-last-item-in-an-array
'source' 카테고리의 다른 글
LIMIT 오프셋에서 MySQL 함수를 사용할 수 있습니까? (0) | 2022.11.18 |
---|---|
MySQL이 0을 유효한 자동 증분 값으로 사용하도록 강제하는 방법 (0) | 2022.11.18 |
EC2의 Amazon RDS Aurora vs RDS MySQL vs MySQL? (0) | 2022.11.18 |
래퍼 클래스 및 프리미티브 유형을 사용해야 하는 경우 (0) | 2022.11.18 |
파일 시스템에서 클래스를 이동한 후 "클래스 XXX가 유효한 엔티티 또는 매핑된 슈퍼 클래스가 아닙니다" (0) | 2022.11.18 |