제러드 스미스의 답변은 훌륭합니다. 코드가 작동하지 않는 이유에 대한 메모를 추가하려고합니다. 당신은 당신이 prop
에 대한 문서를 지적, 모든
R.filter(R.props('a'), {a: 1, b: 2, c: 3, d: 4});
먼저 시도했지만 props
을 사용했다. 이들은 다르지만 관련된 기능입니다. (undefined
에 관한 약간의 복잡성이있다.)
// prop :: k -> {k: v} -> v
prop('c', {a: 1, b: 2, c: 3, d: 4}); //=> 3
처럼
prop
보인다
props
다른 한편으로는 여러 값
// props :: [k] -> {k: v} -> [v]
props(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> [1, 4]
소요 그러나이 중 어느 것도에게 유용한 정보가 될 것입니다에 filter
, 이러한 목적으로 다음과 같이 생각할 수 있습니다.
// filter :: (k -> Bool) -> {k: v} -> {k: v}
filter
의 첫 번째 매개 변수는 (문자열) 키에서 부울 값까지의 함수입니다. 그것은 Javascript의 아이디어와 함께 작동합니다. 몇 가지 특정 값을 제외하고는 모든 것이 진리입니다. 차례대로 각 키와 함께 호출됩니다. 예를 들어, {c: 3}
을 포함할지 여부를 결정할 때 props('a')('c')
을 호출합니다. 약간 다른 이유로 *이 실제로 작동하며 [3]
을 반환합니다. 이는 진실 -y로 처리되며 필터 함수는 출력에 {c: 3}
을 포함합니다. 따라서 모든 키가 포함됩니다.
* 이유 정말 props(['a'], obj)
되어야 props('a', obj)
작품 JS에서 문자열이 length
속성 및 인덱스 값을 갖는리스트에 충분히 가까이있는 점이다. 'a'.length; ==> 1
, 'a'[0]; //=> 'a'
. 따라서 props
은 단일 문자 스트링을 마치 문자 스트링의 단일 요소 목록 인 것처럼 처리 할 수 있습니다. 그러나 조금 이상 할 수도 있습니다 : R.props('cabby', {a: 1, b: 2, c: 3, d: 4}); //=> [3, 1, 2, 2, undefined]
.
원하는 키만 사용하여 개체를 원하십니까? –