2017-09-12 1 views
6

개체의 배열을받는 "필터"함수를 만들었습니다. 각 개체에는 accountId 속성이 있습니다. 내 함수는 다른 accountId이있는 객체를 필터링해야합니다. 그러나 거기에 undefined 개체를 밀어 넣고 있습니다.JS find function undefined

내 기능에 문제가 있습니까? 내가 배열에없는 내 함수에 accountId를 통과하면

export const filterItems = (myArray, accountId) => { 

    let filteredItems = []; 
    filteredItems.push(myArray.find(items => items.accountId === accountId)); 

    return filteredItems; 
} 

는, 출력은 하나 개의 항목을 배열하고 항목은 정의되지 않는다 - 아래 참조 :

[ 
    0: undefined 
] 

무엇 내가 틀렸어?

+0

: 하나의 요소 만 반환하려는 경우 또는 아무 것도 반환하지 않으려는 경우 function에서 _Array_, filteredItem ** s **라는 이름을 반환하는 이유는 무엇입니까? 적어도 Array.prototype.find()가하는 일입니다. 어쩌면 당신은'return myArray.filter (...);'할 의도 였을까요? – blex

+0

'accountId'가 매개 변수에 지정된 것과 일치하는 모든 요소를 ​​반환하고자합니다. 따라서 최종 결과에서 둘 이상의 객체가 될 수 있습니다. 일치하는'accountId'를 가진 객체가 없다면 빈 배열을 반환하고 싶습니다. – Sam

+0

그런 다음 @ Nina의 대답을 찾으십시오. 그것은 일치하는 경우 여러 요소를 반환하는 유일한 방법이고 아무 것도없는 경우 빈 배열입니다 – blex

답변

3

배열을 필터링하고 빈 배열을 반환 할 수 있습니다. 찾을 수 없습니다.

3

코드는 항상 .push()를 호출합니다. .find() 함수는 항목을 찾을 수없는 경우 undefined를 반환합니다.

당신은 .find()에서 반환 값을 잡아가 ​​실제로 발견 때 만 결과를 밀어 수 있습니다

let filteredItems = []; 
let item = myArray.find(items => items.accountId === accountId); 
if (item !== undefined) 
    filteredItems.push(item); 
return filteredItems; 
3

myArray.find(items => items.accountId === accountId)

대신이 시도 undefined을 반환 (그리고 그것이 filteredItems 푸시되고있다) :