MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/a3e7b5301fea

Array.prototype.find()

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

find()메서드는 해당 배열 안의 값을 하나 반환합니다. 이 때, 콜벡으로 전달받은 테스트 함수가 요구하는 조건을 만족하는 값을 반환합니다. 그렇지 않으면 undefined를 반환합니다.

findIndex() 메서드도 살펴보십시오. 이 메서드는 만족하는 값 대신, 만족하는 값의 인덱스를 반환합니다.

Syntax

arr.find(callback[, thisArg])

Parameters

callback
배열의 각 값에 대해서 실행시킬 함수입니다. 아래와 같은 인자를 받습니다:
element
콜백함수 안에서 현재 프로세스가 될 요소.
index
콜백함수 안에서 현재 프로세스가 될 요소의 인덱스.
array
find 함수의 대상이 되는 배열.
thisArg
선택적. 콜백이 호출될 때 this로 사용될 객체.

Return value

element가 테스트를 통과하면 배열 안의 값을 반환, 그외 undefined 를 반환.

Description

find 메서드는 콜백함수를 현재 프로세스 하고 있는 배열의 각 요소에 대해서 콜백함수가 true를 반환할 때까지 실행을 시킵니다. 만약 어떤 값에서 true를 반환했다면 find 메서드는 해당 요소의 값을 즉시 반환하고 그렇지 않으면 undefined를 반환합니다. callback은  해당 배열 안에서 값을 지정받은 상태에 있는 인덱스에 대해서만 호출이 됩니다. 만약 삭제가 되었거나 값을 지정받은 적이 없다면 호출이 되지 않습니다.

callback은 다음의 세가지 인자를 가지고 호출이 됩니다: 요소의 값, 요소의 인데스, 순회의 대상이 되는 배열. 

만약 thisArg가 파라메터로 제공이 되었다면, callback 안에서 this로 사용이 될 것이고 만약 제공되지 않았다면 undefined 가 사용됩니다. 

find는 호출의 대상이 된 배열을 변경(mutate)하지 않습니다.

The range of elements processed by find is set before the first invocation of callback. Elements that are appended to the array after the call to find begins will not be visited by callback. If an existing, unvisited element of the array is changed by callback, its value passed to the visiting callback will be the value at the time that find visits that element's index; elements that are deleted are not visited.

Examples

Find an object in an array by one of its properties

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
    return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

Find a prime number in an array

The following example finds an element in the array that is a prime number (or returns undefined if there is no prime number).

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5

Polyfill

This method has been added to the ECMAScript 2015 specification and may not be available in all JavaScript implementations yet. However, you can polyfill Array.prototype.find with the following snippet:

if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    'use strict';
    if (this == null) {
      throw new TypeError('Array.prototype.find called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return value;
      }
    }
    return undefined;
  };
}

Specifications

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.find' in that specification.
Standard Initial definition.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Array.prototype.find' in that specification.
Draft  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Edge Opera Safari
Basic support 45.0 25.0 (25.0) No support 12 No support 7.1
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Edge Opera Mobile Safari Mobile
Basic support No support No support 25.0 (25.0) No support 12 No support 8.0

See also

문서 태그 및 공헌자

 이 페이지의 공헌자: yuntaek, Jaysok
 최종 변경: yuntaek,