향상된 FP 렌즈 - 한 번에 한 단계씩 기능 향상
lookupGenerator
에 대한 다음 구현으로 이전 게시물을 마쳤습니다.function lookupGenerator(...props) {
return obj =>
props
.reduce((o, p) =>
p in o ? o[p] : null, obj);
}
이전 버전 이후로 일부 개선 사항을 포함하도록 수정했습니다.
어떤 렌즈가 사용되는지 요약
렌즈는 경로를 정의하는 속성/첨자가 주어진 개체/배열에서 값을 추출하는 데 사용되는 기능입니다. 예를 들어:
const testObject = {
alpha: [
{beta: '42', gamma: [ 'A', 'B', 'C']},
{beta: '666', gamma: [ 'a', 'b', 'c']}
]
};
const testLookup = lookupGenerator('alpha', 1, 'gamma', 2);
console.log(testLookup(testObject)); // 'c'
다음과 같이 렌즈가 개체 배열에 대한 메서드 내에서 적용될 때 렌즈가 실제로 고유하게 되는 경우는 다음과 같습니다.
const betaLookup = lookupGenerator('beta');
testObject.alpha.forEach(obj => console.log(betaLookup(obj)));
// Output: 42, 666
위의 예에서
testObject
는 매우 작고 단순하지만 이 기술을 사용하여 sort
, map
또는 filter
와 같은 메서드를 통해 더 복잡한 객체 배열을 전달한다고 상상해 보십시오.그렇다면 위 구현의 한계는 무엇입니까?
이전 게시물에서 설명한 것처럼 위의 기능은 재사용을 개선하기 위해 부분 적용을 사용합니다. 이 함수는 필요한 값을 찾기 위해 개체를 탐색하는 데 사용되는 속성(및 첨자) 목록을 제공하기 위해 두 번 호출됩니다. 이것은 호환 객체(또는 배열)로 호출하여 여러 번 사용할 수 있는 함수를 반환합니다.
개체를 통해 필수 속성에 대한 경로를 규정하는 몇 가지 방법이 있습니다. 위의 예에서 속성 이름 및 배열 첨자의 배열이 제공되었지만
('alpha', 1, 'gamma', 2)
다른 방법은 다음과 같이 경로를 문자열로 제공하는 것입니다'alpha[1].gamma[2]'
.function lookupGenerator(...props) {
return obj =>
props
.join('.')
.split(/[\[\]\.]+/)
.filter(item => item !== '')
.reduce((o, p) =>
typeof o === 'object' && o != null &&
p in o ? o[p] : undefined, obj);
}
위의 구현은 처방 접근 방식 중 하나 또는 둘 모두를 지원할 수 있습니다.
Input options
-------------
lookupGenerator('alpha', 1, 'gamma', 2); // arguments
lookupGenerator('alpha[1].gamma[2]'); // string
lookupGenerator('alpha[1]', 'gamma[2]'); // string arguments
어떻게 작동합니까?
먼저 모든 문자열을 결합하여 각 시퀀스를 구분하는 점이 있는 단일 문자열을 형성합니다. 그런 다음 정규식(RegExp) 일치를 사용하여 각 속성 이름과 배열 첨자를 분리합니다. RegExp의 기능에 대한 논의를 보려면 this of my를 읽어보십시오.
분할 작업의 결과인 세그먼트 배열은 이전과 같이 reduce 메서드에 표시되기 전에 필터링해야 하는 빈 일치 항목을 생성할 수 있습니다. 마지막으로 우리는 reduce 메소드가 프로퍼티를 찾지 못하거나 프로세스 중간에 null을 찾아 예외를 던지는 것을 방지해야 합니다.
이 보충 자료가 유익한 정보였기를 바라지만 아래 토론 섹션에서 관련 질문을 제공하면 기꺼이 답변해 드리겠습니다.
partial application
에 관심이 있다면 에 대한 내 게시물에도 관심이 있을 수 있습니다.
Reference
이 문제에 관하여(향상된 FP 렌즈 - 한 번에 한 단계씩 기능 향상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tracygjg/fp-lenses-enhanced-going-functional-one-step-at-a-time-4cp7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)