2017-11-19 12 views
0

javascript 및 es6을 처음 보시는 분들께. firebase와 redux로 반응하는 네이티브 앱을 만들고 있습니다. 내 액션 크리에이터 중 하나는 실제로 검색 창 기능입니다. Firebase에서이 코드를 사용하여 데이터를 가져 왔습니다..filter()와 함께 .indexOf()를 사용하는 데 문제가 있습니다.

export const searchResult =() => { 
    const { currentUser } = firebase.auth(); 
    return (dispatch) => { 
    firebase.database().ref(`/users/${currentUser.uid}/entries`) 
     .on('value', snapshot => { 
     const obj = snapshot.val(); 

그 부분이 기능을 수행하고 있습니다. 그런 다음 데이터를 배열로 바꾸기를 원합니다.

const array1 = Object.keys(obj).map(function(key) { 
    return [obj[key]]; 
}); 

그리고 이것은 다시 완벽하게 실행됩니다. 그것은 내가 확신하는 코드의 다음 비트 일 뿐이므로, 그것을 고치는 방법을 모른다. 검색 막대에 따라 array1 필터를 반환하고 싶습니다. 여기서 검색 막대를 요소에 하드 코딩했습니다 (코드를 얻으면 전환 할 것입니다).

 const element = '0'; 
     const array2 = array1.filter(array1.indexOf(element) !== -1); 


     dispatch({ type: SEARCH_RESULT_SUCCESS, payload: array2 }); 
     }); 
    }; 
}; 

현재 요소로 일치하는 배열에서 객체를 반환하는 대신 false 값을 반환하는 것 같습니다. 내 논리를 연결하려면 여기에 또 다른 기능이 필요합니까? 내가 뭘 놓치고 있니? 어떤 도움을 많이 주시면 감사하겠습니다! 미리 감사드립니다!

+0

'array1.filter (array1.indexOf (element)! == -1)'오류가 발생하지 않습니까? filter의 인수는'array1.filter ((arr1Elem) => array1.indexOf (element)! == -1와 같은 함수 여야합니다. ' –

+0

오! 그게 전부입니다. 대단히 감사합니다! –

답변

0

filter 메서드에 대한 함수 콜백을 제공해야합니다.

const element = '0'; 
    const array2 = array1.filter((arr1Elem) => array1.indexOf(element) !== -1); 


    dispatch({ type: SEARCH_RESULT_SUCCESS, payload: array2 }); 
    }); 
    }; 
};