javascript - 종류 - jquery 배열 값 가져오기



배열의 마지막 항목 가져 오기 (20)

지금까지 내 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에서 배열의 마지막 항목까지 두 번째 걸립니다. 그러나 나는 "index.html"배열의 마지막 항목에 대한 검사를하고 싶다면 마지막 항목을 대신 세 번째 잡아.


Answer #1

"가장 깨끗한"ES6 방식 (IMO)은 다음과 같습니다.

const foo = [1,2,3,4];
const bar = [...foo].pop();

이렇게하면 스프레드 연산자를 사용하지 않았다면 .pop() 에서와 같이 foo 변경하는 것을 피할 수 있습니다.
즉, 나는 foo.slice(-1)[0] 솔루션도 좋아한다.


Answer #2

@chaiguy가 게시 한 내용의 짧은 버전 :

Array.prototype.last = function() {
    return this[this.length - 1];
}

-1 인덱스를 읽는 것은 이미 undefined 반환합니다.

편집하다:

요즘 환경 설정은 모듈을 사용하고 프로토 타입을 만지거나 전역 네임 스페이스를 사용하지 않는 것 같습니다.

export function last(array) {
    return array[array.length - 1];
}

Answer #3

ES6 / ES2015 스프레드 연산자 (...)를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

const data = [1, 2, 3, 4]
const [last] = [...data].reverse()
console.log(last)

스프레드 연산자와 reverse를 사용하면 원본 배열이 변형되지 않았 음을 알 수 있습니다. 이는 배열의 마지막 요소를 가져 오는 순수한 방법입니다.


Answer #4

URL에서 배열을 추출하지 않고도이 문제를 해결할 수 있습니다.

이것은 나의 대안이다.

var hasIndex = (document.location.href.search('index.html') === -1) ? doSomething() : doSomethingElse();

!인사말


Answer #5

가장 쉽고 비효율적 인 방법은 다음과 같습니다.

var array = ['fenerbahce','arsenal','milan'];
var reversed_array = array.reverse(); //inverts array [milan,arsenal,fenerbahce]
console.log(reversed_array[0]) // result is "milan".

Answer #6

개인적으로 나는 kuporific / kritzikratzi에 의해 대답을 upvote 것이다. 배열 [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]

Answer #7

단점이 있는지 확실하지 않지만 매우 간결 해 보입니다.

arr.slice(-1)[0] 

또는

arr.slice(-1).pop()

배열이 비어 있으면 둘 다 undefined 를 반환합니다.


Answer #8

두 가지 옵션이 있습니다.

var last = arr[arr.length - 1]

또는

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

전자는 더 빠르지 만 후자는 더 멋지게 보인다.

http://jsperf.com/slice-vs-length-1-arr


Answer #9

만약 당신이 제거하지 않고 요소를 얻고 싶다면, 이것을 사용하는 것이 더 간단하다고 생각합니다 :

arr.slice(-1)

그건 그렇고 ... 난 성능을 확인하지 못했지만, 생각보다 간단하고 쓸 깨끗한 것 같아요.


Answer #10

새로운 Array getterArray 프로토 타입에 추가하여 Array 모든 인스턴스를 통해 액세스 할 수 있습니다.

게터를 사용하면 마치 속성의 값인 것처럼 함수의 반환 값에 액세스 할 수 있습니다. 물론 함수의 반환 값은 배열의 마지막 값입니다 ( this[this.length - 1] ).

마지막으로 last property가 아직 undefined 는지 검사합니다 (다른 스크립트에서 정의 undefined 않은지 여부를 검사하는 조건).

if(typeof Array.prototype.last === 'undefined') {
    Object.defineProperty(Array.prototype, 'last', {
        get : function() {
            return this[this.length - 1];
        }
    });
}

// Now you can access it like
[1, 2, 3].last;            // => 3
// or
var test = [50, 1000];
alert(test.last);          // Says '1000'

IE 8 이하에서는 작동하지 않습니다.


Answer #11

음수 값을 가진 slice 메서드를 사용하면 배열의 마지막 항목을 가져올 수 있습니다.

here 에 대한 자세한 내용은 하단에 있습니다.

var fileName = loc_array.slice(-1)[0];
if(fileName.toLowerCase() == "index.html")
{
  //your code...
}

pop ()을 사용하면 배열이 변경되므로 항상 좋은 생각은 아닙니다.


Answer #12

이 질문은 오래 전부터 있었기 때문에 아무도 pop() 후에 마지막 요소를 다시 넣는 것에 대해서는 언급하지 않았다는 것에 놀랐습니다.

arr.pop()arr[arr.length-1] 만큼 효율적이며 arr.pop() 와 같은 속도입니다.

따라서 다음과 같이 벗어날 수 있습니다.

let thePop = arr.pop()
arr.push(thePop)

어느 것이이 (동일한 속도)로 줄일 수 있습니다 :

arr.push(thePop = arr.pop())

이것은 arr[arr.length-1] 보다 두 배 느리지 만, 색인을 작성하지 않아도됩니다. 그것은 언제든지 금의 가치가 있습니다.

내가 시도한 솔루션 중 arr[arr.length-1] 의 실행 시간 단위 (ETU)의 arr[arr.length-1] :

[방법] .............. [ETUs 5 elems] ... [ETU 1 백만 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 :)

마지막 세 가지 옵션 인 ESPECIALLY [...arr].pop() 은 배열의 크기가 커질수록 훨씬 나 빠지게됩니다. 내 컴퓨터의 메모리 제한이없는 컴퓨터에서 [...arr].pop() 아마 120 : 1 비율과 같은 것을 유지할 것입니다. 아직도 아무도 자원 돼지를 좋아하지 않습니다.


Answer #13

이것은 깨끗하고 효율적입니다.

let list = [ 'a', 'b', 'c' ]

(xs => xs[xs.length - 1])(list)

Babel을 사용하여 파이프 연산자를 설치하면 다음과 같이됩니다.

list |> (xs => xs[xs.length - 1])

Answer #14

인덱스보다는 array.pop() 사용하고 싶습니다.

while(loc_array.pop()!= "index.html"){
}
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length])));

이 방법으로 항상 index.html 이전의 요소를 가져옵니다 (배열이 index.html을 하나의 항목으로 분리했다면). 참고 : 배열의 마지막 요소는 손실됩니다.


Answer #15

한 번에 마지막 요소를 가져 오려면 Array#splice() 사용할 수 있습니다.

lastElement = document.location.href.split('/').splice(-1,1);

여기서는 분할 된 요소를 배열에 저장 한 다음 마지막 요소까지 가져올 필요가 없습니다. 마지막 요소를 얻는 것이 유일한 목적이라면, 이것은 사용해야합니다.

참고 : 이렇게하면 마지막 요소를 제거 하여 원래 배열변경합니다 . splice(-1,1) 는 마지막 요소를 pop하는 pop() 함수로 생각하십시오.


Answer #16

jQuery 는 이것을 깔끔하게 해결합니다.

> $([1,2,3]).get(-1)
3
> $([]).get(-1)
undefined

Answer #17

ECMAScript 제안 1 단계 에는 마지막 요소 인 proposal-array-last 반환 할 배열 속성을 추가하라는 제안이 있습니다.

통사론:

arr.lastItem // get last item
arr.lastItem = 'value' // set last item

arr.lastIndex // get last index

polyfill 을 사용할 수 있습니다.

제안서 작성자 : Keith Cirkel ( chai autor)


Answer #18

Array 프로토 타입에 last() 함수를 추가 할 수 있습니다.

Array.prototype.last = function () {
    return this[this.length - 1];
};

Answer #19

편집 :

최근에 나는 내 요구에 가장 잘 맞는 솔루션이라고 생각합니다.

function w (anArray)
{ return (
  { last() {return anArray [anArray.length - 1]
  }
}        );

위의 정의를 적용하면 나는 이제 다음과 같이 말할 수 있습니다.

let last = w ([1,2,3]).last();
console.log(last) ; // -> 3

이름 "w" 는 "래퍼"를 나타냅니다. 이 래퍼에 'last ()'이외의 메소드를 쉽게 추가 할 수있는 방법을 알 수 있습니다.

"내 필요에 가장 잘 맞았다"라고 말하면, 이렇게하면 JavaScript 내장형에 다른 "도우미 메서드"를 쉽게 추가 할 수 있기 때문입니다. 마음에 떠오르는 것은 예를 들어 Lisp의 car ()와 cdr ()입니다.


Answer #20
const lastElement = myArray[myArray.length - 1];

이것은 성능 관점에서 가장 좋은 옵션입니다 (arr.slice (-1)보다 1000 배 빠름).





arrays