배열의 첫 번째 요소를 얻는 방법?


236

다음과 같이 배열에서 첫 번째 요소를 얻는 방법은 무엇입니까?

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

나는 이것을 시도했다 :

alert($(ary).first());

그러나 그것은 돌아올 것이다 [object Object]. 따라서 배열에서 첫 번째 요소를 가져와야 'first'합니다.


2
적극적으로
— leonheess

답변:


338

이처럼

alert(ary[0])

35
var a = []; a[7] = 'foo'; alert(a[0]);
— Petah

72
이 배열의 첫 번째 요소는 항상 ... 그들이 가정에 대해 무슨 말을 당신은 알고 0의 인덱스가 있다고 가정합니다
— 앤디

16
@Andy OP의 질문은 분명하고 구체적이기 때문에 가정이 없었습니다.
— John Hartsock

5
@Petah 그 코드에는 아무런 문제가 없습니다. 배열의 첫 번째 항목 인 a [0]의 값이므로 정의되지 않은 상태로 표시됩니다. foo를 표시하려면 정의되지 않은 모든 값을 건너 뛰어야하지만 배열의 첫 번째 항목은 아닙니다.
— Michiel van der Blonk

5
@ MichielvanderBlonk 나는 단순히 일부 사용자가 기대할 수없는 가장자리 사례를 지적하고있었습니다.
— Petah


92

다른 상황에 따라 아래의 몇 가지 방법이 있습니다.

대부분의 경우 첫 번째 요소에 액세스하는 가장 간단한 방법은

yourArray[0]

그러나 [0]이 실제로 존재하는지 확인해야합니다.

실제 배열에 신경 쓰지 않고 색인이 존재하는지 확인하고 싶지 않은 경우 첫 번째 요소 또는 정의되지 않은 인라인을 얻으려는 실제 사례가 있습니다.

이 경우 shift () 메서드를 사용 하여 첫 번째 요소를 가져올 수 있지만이 메서드는 원래 배열을 수정하고 첫 번째 항목을 제거하고 반환해야합니다. 따라서 배열의 길이는 1 씩 줄어 듭니다. 이 방법은 첫 번째 요소를 가져와야하는 인라인 경우에 사용할 수 있지만 원래 배열은 신경 쓰지 않습니다.

yourArray.shift()

알아야 할 중요한 사항은 배열이 [0] 인덱스로 시작하는 경우 위의 두 옵션 만 옵션이라는 것입니다.

첫 번째 요소가 삭제 된 경우가 있는데, 예를 들어 yourArray [0]을 삭제하면 배열에 "구멍"이 남습니다. 이제 [0]의 요소는 정의되지 않았지만 첫 번째 "기존"요소를 가져 오려고합니다. 나는 이것에 대한 많은 실제 사례를 보았습니다.

따라서 배열과 첫 번째 키에 대한 지식이 없거나 첫 번째 키를 알고 있다고 가정하면 여전히 첫 번째 요소를 얻을 수 있습니다.

find () 를 사용 하여 첫 번째 요소를 얻을 수 있습니다 .

find ()의 장점은 조건을 만족하는 첫 번째 값에 도달하면 루프를 빠져 나가는 효율성입니다 (자세한 내용은 아래 참조). (널 또는 다른 빈 값도 제외하도록 조건을 사용자 정의 할 수 있습니다)

var firstItem = yourArray.find(x=>x!==undefined);

또한 filter ()를 여기에 먼저 복사에서 배열을 "수정"하고 원래 배열을 그대로 유지하면서 첫 번째 요소를 가져 오는 옵션으로 포함하고 싶습니다 .

여기에 filter ()를 포함시키는 또 다른 이유는 find () 이전에 존재했으며 많은 프로그래머가 이미 사용하고 있기 때문입니다 (find ()에 대한 ES5는 ES6 임).

var firstItem = yourArray.filter(x => typeof x!==undefined).shift();

filter ()는 실제로 효율적인 방법은 아니며 (filter ()가 모든 요소를 ​​통해 실행 됨) 다른 배열을 만듭니다. 예를 들어 forEach를 사용하는 경우 성능에 미치는 영향이 미미하므로 소규모 어레이에서 사용하는 것이 좋습니다.

(나는 어떤 사람들은 첫 번째 요소를 얻기 위해 루프를 위해 ... 사용하는 것이 좋습니다 볼 수 있지만, 나는이 방법에 대해 추천 을 위해 ... 배열을 통해 반복 사용하지 않아야의 인덱스 순서가 중요한 경우 는 아무튼 때문에 ' 브라우저가 대부분의 순서를 존중한다고 주장 할 수는 있지만 순서를 보장하지는 않지만 forEach는 문제를 해결할 수 없기 때문에 많은 제안 된 문제를 해결하지 못하며 모든 요소를 ​​통과하게됩니다. 루프 및 키 / 값 확인

find ()와 filter ()는 요소의 순서를 보장하므로 위와 같이 사용하는 것이 안전합니다.


1
나중에 배열의 이동을 해제하지 않는 이유는 다음과 같습니다. var element = yourArray.shift (); yourArray.unshift (요소);
— 그렉

9
그것은 매우 비효율적이고 나쁜 일이기 때문입니다. 첫 번째 요소를 훨씬 효율적으로 얻을 수 있습니다. shift와 unshift는 검사를 수행하고 전체 배열을 순회하여 작업을 수행하기 때문에 처음에 새 요소를 제거하거나 추가 할 때 다른 모든 인덱스를 이동해야하기 때문입니다. 마치 사람들로 가득 찬 버스가 있고 뒷좌석에서 누군가 내리려고 할 때 정문을 통해 버스를 비운 다음 다시 타라고 요청하십시오.
— Selay

1
인터프리터의 특정 내부에 의존하는 @Selay.
— Michiel van der Blonk

@Michiel van der Blonk 당신이 언급 한대로 어떤 통역사가 그 일을하는지 알려주십시오. 나는 매우 관심이 있습니다. 나에게 알려진 모든 구현은 루프 및 복사를 사용합니다. JavaScript 배열이 작동하는 방식입니다. 나머지 배열은 이제 1부터 시작하므로 (0 위치의 요소 제거) 수정해야하는 첫 번째 요소를 쉽게 제거 할 수 없습니다. 내부 구현에 관계없이 마술을 만들 수 없습니다.
— Selay

당신이 yourArray.map(n=>n).shift()그것을 사용 하면 원본을 수정하지 않고 첫 번째 항목을 반환합니다 ... 그것이 가장 좋은 방법인지는 모르지만 .map (). filter (). some (). shift ()로 배열을 체인하면 괜찮습니다. .. 그렇지 않으면 내가 사용하는 것이yourArray[0]
— 마이클 J. Zoidl

53

첫 번째 요소가 삭제 된 경우 인덱스 0의 요소가 없을 수 있습니다.

let a = ['a', 'b', 'c'];
delete a[0];

for (let i in a) {
  console.log(i + ' ' + a[i]);
}

jQuery없이 첫 번째 요소를 얻는 더 좋은 방법 :

function first(p) {
  for (let i in p) return p[i];
}

console.log( first(['a', 'b', 'c']) );


1
a.entries () [0] : 그것을해야
— 에드 슨 메디

1
배열 멤버가 아닌 객체를 열거하기 때문에 배열과 함께 열거에 이러한 종류를 사용해서는 안되기 때문입니다. 대신 전통적인 for 루프를 사용하여 인덱싱을 사용하십시오.
— Oskar Duveborn

여기에 (또한 숫자 인덱스에 의존하지 않음) 유사 ES6 방법 : stackoverflow.com/a/56115413/7910454
— leonheess

51

ES6 파괴 사용

let [first] = [1,2,3];

어느 것과

let first = [1,2,3][0];

배열이 [0] 인덱스로 시작하는 경우 Destructing이 옵션 일 뿐이라는 점을 추가하는 것이 좋습니다.
— leonheess

46

가독성 을 유지하려면 항상 첫 번째 함수를 Array.protoype:

Array.prototype.first = function () {
    return this[0];
};

그런 다음 첫 번째 요소를 쉽게 검색 할 수 있습니다.

[1, 2, 3].first();
> 1

14
어떤 이유로 든 기본 클래스의 프로토 타입을 다루는 것은 매우 나쁜 습관으로 간주됩니다.
— Dmitry Matveev

11
어리석은 일 .first()보다 타이핑이 더 나은 [0]가요?
— jonschlinkert

10
@jonschlinkert 일부 언어에는에서 시작하는 색인이 1있습니다. first이 경우 모호하지 않습니다.
— Bartek Banachewicz

6
[] .first ()는 무엇을 반환합니까?
— Rhyous 2016 년

1
내 테스트에서는 정의되지 않은 값을 반환합니다. 정의되지 않은 반환을 좋아하는지 결정하려고합니다.
— Rhyous 2016 년

33

당신은 그냥 사용할 수 있습니다 find() :

let first = array.find(Boolean);

또는 거짓 인 경우 에도 첫 번째 요소를 원하는 경우 :

let first = array.find(e => true);

추가 마일로 이동 :

가독성에 관심이 있지만 숫자 발생에 의존하고 싶지 않다면 내장 Array 객체 프로토 타입을 직접 수정하는 함정을 완화시키는 기능 을 정의 first()하여 추가 할 수 있습니다 ( 여기 설명 ).Array.protoypeObject​.define​Property()

성능은 꽤 좋지만 ( find()첫 번째 요소 다음에 멈춤) 완벽하거나 보편적으로 액세스 할 수있는 것은 아닙니다 (ES6 만 해당). 더 많은 배경을 보려면 @Selays answer를 읽으 십시오 .

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(e => true);     // or this.find(Boolean)
  }
});

그런 다음 첫 번째 요소를 검색하려면 다음을 수행하십시오.

let array = ['a', 'b', 'c'];
array.first();

> 'a'

실제로 볼 수있는 스 니펫 :

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(Boolean);
  }
});

console.log( ['a', 'b', 'c'].first() );


3
이것은 가장 좋고 가장 최신의 답변입니다. 나는 여기에 동일하게 게시하려고했지만, 당신의 것을 본 후에 :)
— Kostanos

향후 버전의 언어에서 find ()를 추가하면 어떻게됩니까? :-) 위의 코드 조각이 깨지지 않습니까?
— Bogdan

@Bogdan 추가 할 때find() 무엇을 의미 합니까? find()오랫동안 언어의 일부였습니다. 위의 스 니펫이 작동하는 이유입니다.
— leonheess

오 죄송하지만 조금 피곤해서 처음봤을 때 많이 잤습니다.
— Bogdan

그것은 아직 완벽하게 잘 작동하지만, 덮어 쓰기 @Bogdan 잠재적 인 미래는 first()언어의 -method
— leonheess

18

배열이 인덱스 0에서 채워지지 않을 경우 다음을 사용할 수 있습니다 Array.prototype.find().

var elements = []
elements[1] = 'foo'
elements[2] = 'bar'

var first = function(element) { return !!element }    
var gotcha = elements.find(first)

console.log(a[0]) // undefined
console.log(gotcha) // 'foo'

3
이것은 실제로 더 높은 표를 뽑아야합니다. 바닐라 js를 사용하고 희소 배열을 설명하는 가장 간결한 솔루션입니다.
— Dominic P


1
!!element허위 값을 건너 뛰므로 사용 하지 않는 것이 좋습니다. find()이런 식으로 사용 하는 것이 좋습니다 .sparse.find((_, index, array) => index in array);
— Victor Welling

여기 falsy 값을 제거하지 않고 비슷한 접근 방식 stackoverflow.com/a/56115413/7910454
— leonheess을

13
array.find(e => !!e);  // return the first element 

"find"는 필터와 일치하는 첫 번째 요소를 리턴하고 &&는 !!e모든 요소와 일치합니다.

참고 첫 번째 요소는 "Falsy"없는 경우에만 작동 : null, false, NaN, "", 0,undefined


1
다른 사람을 위해 당신의 조건이 어떤 진실한 요소와 일치 하는지를 명확히하기 위해, 즉 <code> const example = [null, NaN, 0, undefined, {}, 3, 'a']; const firstTruthyElement = example.find (e => !! e); // 다섯 번째 요소, 첫 번째 허위가 아닌 요소를 지정합니다 : {} </ code>
— PDA

따라와 주셔서 감사합니다 @PDA. BTW, 빈 문자열도 거짓으로 간주됩니다
— Abdennour TOUMI

3
이것은 훌륭하고 TypeScript에서도 훌륭하게 작동합니다. 단순화는 array.find(() => true);어떻습니까? 이것은 당신도 할 수 [false].find(() => true)있습니다.
— Simon Warta

@SimonWarta는 물론 .find(value => true)예상대로 작동하지만 솔직히 코드를 깔끔하게 작성하고 타이핑을 타이프 스크립트로 유지하려면 파괴를 사용하십시오 .
— Flavien Volken

허위 요소를 무시하는 함정없이 비슷한 방법 으로이 답변 을 보십시오
— leonheess



7

내가 좋아하는 뭔가를 찾고, 자바 스크립트로 다른 언어에서 오는 그 사람을 알 head()거나first() 배열의 첫 번째 요소 얻는 것을 알고 있지만 어떻게 할 수 있습니까?

아래 배열이 있다고 상상해보십시오.

const arr = [1, 2, 3, 4, 5];

JavaScript에서 간단하게 다음을 수행 할 수 있습니다.

const first = arr[0];

또는 더 깔끔하고 새로운 방법은 다음과 같습니다.

const [first] = arr;

그러나 단순히 다음 과 같은 함수 를 작성할 수도 있습니다 .

function first(arr) {
   if(!Array.isArray(arr)) return;
   return arr[0];
}

밑줄을 사용하는 경우 원하는 것과 동일한 기능을 수행하는 함수 목록이 있습니다.

_.first 

_.head

_.take

6

메소드는 배열과 작품 , 그리고 그것을 객체와 함께 작동 도 (주의, 객체는 보장 된 순서가 없습니다!).

원래 배열은 수정되지 않기 때문에이 방법을 가장 선호합니다.

// In case of array
var arr = [];
arr[3] = 'first';
arr[7] = 'last';
var firstElement;
for(var i in arr){
    firstElement = arr[i];
    break;
}
console.log(firstElement);  // "first"

// In case of object
var obj = {
    first: 'first',
    last: 'last',
};

var firstElement;

for(var i in obj){
    firstElement = obj[i];
    break;
}

console.log(firstElement) // First;


4

진실한 요소에만 관심이있는 사람들을위한 또 하나

ary.find(Boolean);

4

필터를 사용하여 배열에서 첫 번째 요소를 찾으십시오.

타이프 스크립트에서 :

function first<T>(arr: T[], filter: (v: T) => boolean): T {
    let result: T;
    return arr.some(v => { result = v; return filter(v); }) ? result : undefined;
}

일반 자바 스크립트에서 :

function first(arr, filter) {
    var result;
    return arr.some(function (v) { result = v; return filter(v); }) ? result : undefined;
}

마찬가지로 indexOf :

타이프 스크립트에서 :

function indexOf<T>(arr: T[], filter: (v: T) => boolean): number {
    let result: number;
    return arr.some((v, i) => { result = i; return filter(v); }) ? result : undefined;
}

일반 자바 스크립트에서 :

function indexOf(arr, filter) {
    var result;
    return arr.some(function (v, i) { result = i; return filter(v); }) ? result : undefined;
}

3

일치하는 항목이 여러 개인 경우 JQuery의 .first ()는 jquery에 제공된 CSS 선택기와 일치하는 첫 번째 DOM 요소를 가져 오는 데 사용됩니다.

자바 스크립트 배열을 조작하기 위해 jQuery가 필요하지 않습니다.


3

배열이 비어있는 시간을 고려해보십시오.

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
first = (array) => array.length ? array[0] : 'no items';
first(ary)
// output: first

var ary = [];
first(ary)
// output: no items

3

그냥 사용 ary.slice(0,1).pop();

에

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

console.log("1º "+ary.slice(0,1).pop());
console.log("2º "+ary.slice(0,2).pop());
console.log("3º "+ary.slice(0,3).pop());
console.log("4º "+ary.slice(0,4).pop());
console.log("5º "+ary.slice(0,5).pop());
console.log("Last "+ary.slice(-1).pop());

array.slice (START, END) .pop ();


왜 그렇지 ary[0]않습니까?
— nathanfranke


1

이것을 사용하여 문자를 자바 스크립트로 분할하십시오.

var str = "boy, girl, dog, cat";
var arr = str.split(",");
var fst = arr.splice(0,1).join("");
var rest = arr.join(",");

1

앞의 예제는 배열 인덱스가 0에서 시작할 때 잘 작동합니다. thomax의 답변 은 0에서 시작하는 색인에 의존 Array.prototype.find하지 않았지만 액세스 할 수 없었던 것에 의존했습니다 . jQuery $ .each를 사용하는 다음 솔루션 은 제 경우에 잘 작동했습니다.

let haystack = {100: 'first', 150: 'second'},
    found = null;

$.each(haystack, function( index, value ) {
    found = value;  // Save the first array element for later.
    return false;  // Immediately stop the $.each loop after the first array element.
});

console.log(found); // Prints 'first'.

1

당신은 그것을 할 수 lodash _.head 그렇게 쉽게.

var arr = ['first', 'second', 'third', 'fourth', 'fifth'];
console.log(_.head(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


2
말 그대로 않습니다 arr[0]당신이 볼 수 있듯이 여기에 내가 이유입니다 강력하게 같은 작은 작업 lodash 같은 거대한 라이브러리를 사용하여 낙담.
— leonheess

1

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
alert(Object.values(ary)[0]);


이것은 바닐라 JS, jQuery, libs, no-nothing입니다. : : 배열 인덱스가 0에서 시작하지 않으면 작동합니다.
— 메라크 Marey

0

@NicoLwk 스플 라이스로 요소를 제거하면 배열이 다시 이동합니다. 그래서:

var a=['a','b','c'];
a.splice(0,1);
for(var i in a){console.log(i+' '+a[i]);}

2
이 답변은 위의 (NicoLwks) 답변에 대한 주석이며 삭제해야합니다
— Lino

0

첫 번째 배열 을 얻기 위해 프로토 타입 선언 요소 .

Array.prototype.first = function () {
   return this[0];
};

그런 다음 다음과 같이 사용하십시오.

var array = [0, 1, 2, 3];
var first = array.first();
var _first = [0, 1, 2, 3].first();

또는 단순히 (:

first = array[0];

0

뷰 함수를 배열에 연결하는 경우

array.map(i => i+1).filter(i => i > 3)

이 함수 다음에 첫 번째 요소를 원하면 단순히 .shift()원본을 수정하지 않고 array더 좋은 방법으로 추가 할 수 있습니다.array.map(i => i+1).filter(=> i > 3)[0]

원본을 수정하지 않고 배열의 첫 번째 요소를 원한다면 array[0]또는 array.map(n=>n).shift()맵을 사용하여 원본을 수정할 수 있습니다 .이 경우 btw ..[0]버전을 제안합니다 .


0
var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

console.log(Object.keys(ary)[0]);

객체 배열 ( req)을 만든 다음 Object.keys(req)[0]객체 배열에서 첫 번째 키를 선택하기 만하면 됩니다.


2
이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다.
— DimaSan 2012

0

@thomax의 대답은 꽤 좋지만 배열의 첫 번째 요소가 false 또는 false-y (0, 빈 문자열 등)이면 실패합니다. 정의되지 않은 것 이외의 것에 대해서만 true를 반환하는 것이 좋습니다.

const arr = [];
arr[1] = '';
arr[2] = 'foo';

const first = arr.find((v) => { return (typeof v !== 'undefined'); });
console.log(first); // ''

-1

ES6 쉬움 :

let a = []
a[7] = 'A'
a[10] = 'B'

let firstValue = a.find(v => v)
let firstIndex = a.findIndex(v => v)

1
아니요… 첫 번째로 정의 된 값을 반환합니다. 첫 번째 문자열이 null, undefined, false, 0 또는 빈 문자열이면 해당 문자열을 건너 뜁니다. 시도 :[false, 0, null, undefined, '', 'last'].find(v => v)
— Flavien Volken

좋은 해결책은 솔루션이 정의 된 값을 가진 배열에 대해서만 작동한다는 것입니다.
— Jan Jarčík

1
그렇다면 왜 값을 사용하여 필터링합니까? a.find(value => true)어떤 값도 무시하지 않습니다. 그래도 find를 사용하여 첫 번째 항목을 얻는 것은 좋지 않습니다.
— Flavien Volken

1
@ MiXT4PE 반환 사실 (당신의 대답에로)는 첫 번째 요소에서 중지됩니다 있기 때문에 하나가 false로 간주되는 경우 계속 요소 자체 ... 반환, 여기 괜찮습니다
— 의 Flavien Volken

1
"find"를 사용하는 @ MiXT4PE는 더 느리고 더 복잡하며 덜 우아합니다. 또한이 작업을 리팩터링 할 수있는 스마트 편집기가 있는지 의심합니다. 구조화를 사용하는 것이 훨씬 효율적이고 언어에 의해 이해되므로 (리팩토링 가능) 컴파일러에 의해 형식이 이해되고 (TS의 경우) 가장 빠른 솔루션 일 가능성이 높습니다.
— Flavien Volken
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.