현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.
find()
메서드는 해당 배열 안의 값을 하나 반환합니다. 이 때, 콜벡으로 전달받은 테스트 함수가 요구하는 조건을 만족하는 값을 반환합니다. 그렇지 않으면 undefined
를 반환합니다.
findIndex()
메서드도 살펴보십시오. 이 메서드는 만족하는 값 대신, 만족하는 값의 인덱스를 반환합니다.
Syntax
arr.find(callback[, thisArg])
Parameters
callback
- 배열의 각 값에 대해서 실행시킬 함수입니다. 아래와 같은 인자를 받습니다:
element
- 콜백함수 안에서 현재 프로세스가 될 요소.
index
- 콜백함수 안에서 현재 프로세스가 될 요소의 인덱스.
array
find
함수의 대상이 되는 배열.
thisArg
- 선택적. 콜백이 호출될 때
this
로 사용될 객체.
Return value
A value in the array if an element passes the test; otherwise, 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 |