JavaScript에서 주문 기능 향상

JavaScript에서 주문 기능 향상

科技

다른 공연에 대한 주장으로 공연을 교차하는 가장 좋은 방법입니다.

다른 기능에 인수로 기능을 전달하는 것은 기능의 동작을 사용자 정의하는 방법 중 하나일 가능성이 높습니다. 즉, 완전히 다른 기능을 매개변수로 단일 기능에 교차하여 코드를 더 깔끔하고 재사용 가능하게 만들 수 있습니다. 이를 수행하는 방법을 살펴보겠습니다.

인스턴스 1

생각해보세요 calculate() perform은 완전히 다른 수학적 계산을 수행하는 데 도움이 됩니다. 두 개의 숫자 a와 b, 그리고 perform이라는 연산을 인수로 사용합니다. 그런 다음 완전히 다른 수학적 특징을 설명합니다. 즉, add그리고 subtract.

그런 다음 우리는 다음을 사용합니다. calculate() 수학적 특징을 수행하고 수학적 연산이 수행될 정수를 제공합니다.

1
perform calculate(a, b, operation) {
2
    return operation(a,b);
3
  }
4
  
5
 
6
  perform add(a, b) {
7
    return a + b;
8
  }
9
  
10
  perform subtract(a, b) {
11
    return a - b;
12
  }
13
  
14

15
console.log(calculate(10, 5, add)); //output // 15
16
console.log(calculate(10, 5, subtract)); //output //5

위에서 볼 수 있듯이 완전히 다른 작업을 분리함으로써 코드를 변경하지 않고도 간단히 확장할 수 있습니다. calculate () 공연하다.

인스턴스 2

다른 사례를 하나 살펴보겠습니다. 아래에 증명된 이름 배열이 있다고 가정해 보겠습니다.

1
const names = ['Ann','Alex', 'Barman', 'zen','liz', 'Christopher', 'Isabella']

그러면 이름이 3글자 이하인 개인을 걸러내는 작업이 당신에게 주어졌다고 가정해 보자. 당신은 아마도 다음과 같은 결과를 얻을 것이다.

1
perform shortNames(namesArr){
2
    const outcome = []
3
    for(i=0; i namesArr.size; i++){
4
        if (namesArr[i].size  3){
5
            outcome.push(namesArr[i])
6
            
7
        }
8
    }
9
    return outcome
10
}
11

12
console.log(shortNames(names)) //output //[ 'Ann', 'zen', 'Liz' ]

바로 여기서 우리는 공연을 만듭니다 shortNames매개변수로 이름 배열을 사용합니다. 그런 다음 빈 배열을 설명했습니다. outcome. 그런 다음, 우리는 다음을 생성합니다. for 루프는 배열 내의 모든 요소를 ​​반복하고 크기를 확인합니다. 구성 요소의 크기가 3자 이하이면 요소는 간단한 제목으로 간주되어 결과 배열로 푸시됩니다. 마지막으로 필터링된 간단한 이름이 포함된 새 배열을 반환합니다.

또한 8자 이상의 문자로 구성된 이름, 즉 긴 이름을 가진 모든 개인을 추가로 확보해야 한다고 가정하면 우리의 성과는 다음과 같을 것입니다. shortNames() 공연하다

1
perform LongNames(namesArr){
2
    const outcome = []
3
    for(i=0; i namesArr.size; i++){
4
        if (namesArr[i].size >= 8){
5
            outcome.push(namesArr[i]) 
6
            
7
        }
8
    }
9
    return outcome
10
}
11
console.log(LongNames(names)); //ouput // [ 'Christopher', 'Isabella' ]

그만큼 LongNames 그리고 shortNames 각 기능은 다음과 같은 비슷한 임무를 수행합니다.

  • 이름 배열을 통한 루핑
  • 필요한 상황에 따라 배열 내의 모든 제목을 필터링합니다.
  • 상황을 충족하는 구성 요소를 새로운 배열로 푸시합니다.

그럼에도 불구하고, 우리는 코드를 줄이고 일반적인 수행을 만들어 반복적인 업무를 피할 것입니다. 위의 두 가지 기능에 모든 논리가 필요하지 않으므로, 아래에 증명된 대로 다시 작성합니다.

1
perform isShortName(title, size) {
2
    return title.size  size;
3
}
4

5
perform isLongName(title, size) {
6
    return title.size >= size;
7
}

바로 여기서 우리는 우리의 기능을 설명합니다 isShortName 그리고 isLongName이는 title과 size라는 두 가지 인수를 취합니다. isShortName 주어진 제목이 필요한 크기보다 작거나 같은지 테스트합니다. 반환합니다. true 주어진 제목이 상황을 만족시킨다면.

IsLongName() 비슷한 것을 하나 했지만 반환 true 주어진 제목이 제공된 크기보다 크거나 같은 경우.

그 다음에는 다음을 생성하겠습니다. filterNames 다양한 상황에 따라 이름을 필터링하기 위해 수행합니다. filterNames perform은 세 가지 인수를 취합니다:

  • 이름 배열.
  • 콜백 수행(둘 다 가능) IsLongName 또는 isShortName).
  • 이름을 필터링하는 데 사용되는 크기 상황입니다.
1
perform filterNames(namesArr, conditionFn, size) {
2
    const outcome = [];
3
    for (let i = 0; i  namesArr.size; i++) {
4
        if (conditionFn(namesArr[i], size)) {
5
            outcome.push(namesArr[i]);
6
        }
7
    }
8
    return outcome;
9
}

그러므로 이제 우리가 이것을 활용하기로 결심한다면 filterNames() 어떤 콜백 기능을 사용하더라도 동일한 출력을 얻을 수 있습니다.

1
console.log(filterNames(names, isShortName, 3)); // [ 'Ann', 'zen', 'Liz' ]
2
console.log(filterNames(names, isLongName, 8));  //[ 'Christopher', 'Isabella' ]

주문 능력 증가의 예

증가된 순서의 특징은 일반적으로 매핑, 필터링 및 배열 감소에 사용됩니다. 본질적으로 가장 일반적으로 사용되는 고차의 특징은 다음과 같습니다.

  • 필터()
  • 지도()
  • 축소()

filter() 기술 활용

제목에서 암시하는 바와 같이, filter() 기술은 필요한 상황에 따라 배열의 구성 요소를 필터링합니다. 배열에 사용될 때, filter() 기술은 공연의 상황을 충족하는 고유한 배열의 날씨만을 사용하여 또 다른 배열을 생성합니다.

아래의 배열을 생각해 보세요. 여기에는 일부 근로자의 이름과 급여가 표시되어 있습니다.

1
구성하다 근로자들 = [
2
    {name: "Alice",salary: 25000 },
3
    {name: "Bob",salary: 30000},
4
    {name: "Charlie",salary: 28000},
5
    {name: "Cate",salary: 100000,},
6
    {name: "Mike",salary: 120000,},
7
    {name: "Lucy",salary: 55000,},
8
    {name: "Liam",salary: 70000,},
9
]

70,000달러 이상의 직원 소득을 필터링해야 한다고 가정해 보겠습니다. 이를 수행하는 기술은 다음을 활용하는 것입니다. for 루프를 돌고, 모든 요소에 대해 루프를 돌고, 모든 반복에서 상황을 만족하는 워커를 새로운 배열에 푸시합니다. 이는 아래에서 증명된 바와 같습니다.

1
const filteredEmployees = []
2
for(i =0 ;i 
3
    if(workers[i].wage >=70000 ){
4
        filteredEmployees.push(workers[i])
5
 }}
6
 
7
 console.log(filteredEmployees);

수행이 예상대로 작동하지만 답변을 구현하는 더 높은 방법이 있습니다. filter () 기술은 우리의 단점에 대한 훌륭한 해결책입니다. 그 구문은 다음과 같습니다.

1
const newArray = array.filter(callbackFn,thisArg)

장소 callbackFn 구성 요소를 필터링하는 기능입니다. callbackFn 세 가지 선택적인 주장이 필요합니다. factor, index그리고 array. thisArg 선택과목입니다.

먼저, worker 객체를 흡수하고 wage 속성 내의 value가 70,000보다 큰지 테스트할 수 있는 callbackFn을 개략적으로 살펴보겠습니다.

1
perform checkSalary(worker){
2
    return worker.wage >= 70000
3
}

다음으로, 다음을 적용해 보겠습니다. filter() 우리의 기술 callbackFxn 그리고 그것을 할당합니다 filtredArray.

1
const filteredArray = workers.filter(checkSalary);
2
console.log(filteredArray)

우리의 출력은 다음과 같습니다:

1
[
2
  { name: 'Cate', salary: 100000 },
3
  { name: 'Mike', salary: 120000 },
4
  { name: 'Liam', salary: 70000 }
5
]

Map() 방법론 활용

그만큼 map() 기술은 고유한 배열의 각 요소에 콜백 함수를 사용하여 새로운 배열을 생성하는 또 다른 고차 함수입니다.

구문은 다음과 같습니다.

1
const newArray = originalArray.map(callbackFn, thisArg);

그 장소 callbackFn 다음 매개변수 내에서 사용합니다.

  • currentValue – 현재 처리 중인 요소
  • index – 처리 중인 현재 요소의 인덱스
  • array – 독특한 배열

thisArg 선택과목입니다.

아래의 학자 배열에는 다양한 주제에 대한 대학생의 이름과 성적, 그리고 일반적인 성적이 포함되어 있으므로, 배열에서 이름과 일반적인 성적만 추출해야 합니다.

1
구성하다 대학생들 = [
2
    {
3
        names: "Alice Bob",Math: 85,Science: 92,History: 78,English: 88,Art: 95,
4
        grade:87.6
5
    },
6
    {
7
        names: "Michael Smith",Math: 76,Science: 89,History: 92,English: 80,
8
        Art: 91,
9
        grade:85.6
10
    },
11
    {
12
        names: "William Brown",Math: 70,Science: 78,History: 75,English: 88,Art: 79,
13
        grade:76
14
    },
15
    {
16
        names: "Julia Lee", Math: 52, Science: 63, History: 76, English: 87,
17
        Art: 94,
18
        grade:74.2
19
    },
20
    {
21
        names:"George Harrison",Math: 88,Science: 77,History: 50,English: 84,
22
        Art: 71,
23
        grade:74
24
    },
25
];

우리는 사용할 수 있습니다 map() 학자 이름과 일반 학점을 검색하는 기술입니다. 먼저, 학생을 인수로 받고 학자의 직함과 일반 학점을 추출하는 콜백 perform을 만들어 보겠습니다.

1
perform gradeOnly(pupil){
2
   return ({names:pupil.names, grade: pupil.grade})
3
}

콜백은 인수로 학생 객체를 받아서 이름과 성적 속성만 포함하는 새로운 객체를 반환합니다.

그 다음, map() 기술을 사용하여 새로운 배열을 생성합니다. gradeOnly() 대학생 배열 내의 모든 학생에게. map() 기술은 모든 동공 배열 요소를 통해 반복되고 적용됩니다. gradeOnly() 공연하다.

1
const studentsData = college students.map(gradeOnly)
2
console.log(studentsData)

우리의 출력은 다음과 같습니다:

1
[
2
  { names: 'Alice Bob', grade: 87.6 },
3
  { names: 'Michael Smith', grade: 85.6 },
4
  { names: 'William Brown', grade: 76 },
5
  { names: 'Julia Lee', grade: 74.2 },
6
  { names: 'George Harrison', grade: 74 }
7
]

화살표 특징을 활용하여 이 표현식을 다음과 같이 단순화합니다.

1
const studentsData = college students.map(
2
    pupil=> ({names:pupil.names, grade: pupil.grade}))
3
console.log(studentsData)

Array.scale back() 메서드 활용

제목에서 암시하는 바와 같이, scale back() 기술은 배열을 받아서 하나의 값으로 줄입니다. 축소 기술의 구문은 다음과 같습니다.

1
array.scale back(perform(complete, currentValue, currentIndex, arr), initialValue)

장소

  • 전체는 결과가 될 것입니다
  • currentValue는 반복 과정 전체에 걸쳐 현재 요소가 됩니다.
  • initialValue는 0이어야 합니다.
  • currentIndex와 arr은 선택 사항입니다.

아래의 숫자 배열에서 숫자의 합을 구하고 싶다고 가정해 보겠습니다. scale back() 기술:

1
numbers = [10,20,30,40]

complete와 amount를 인수로 받을 수 있는 콜백 perform을 정의하는 것으로 시작해 보겠습니다. 콜백 perform은 고유한 배열의 모든 amount를 포함하는 결과를 전체에 반환합니다.

1
perform addNumbers(complete,quantity){
2
    return complete+=quantity
3
}

그 다음에는 다음을 적용합니다. scale back() 숫자 배열에 기술을 적용하고 사용하세요 addNumbers 콜백이 수행되기 때문입니다. 숫자 배열 내의 모든 요소는 모든 반복에 대해 콜백 수행에 사용됩니다.

1
const cumulativeTotal =numbers.scale back(addNumbers);
2
console.log(cumulativeTotal); //output //100

출력은 예상대로 100이 될 것입니다. 예비 가치를 설명하지 않으면 주요 요소는 예비 가치로 간주되고 출력은 여전히 ​​동일합니다.

1
numbers = [10,20,30,40]
2
numbers.scale back(perform(complete, quantity){
3
    return complete+quantity
4
})

다음과 같이 화살표 기능을 활용하여 표현을 더욱 단축할 수 있습니다.

1
const cumulativeTotal = numbers.scale back((complete,quantity) => complete+=quantity)
2
console.log(cumulativeTotal); //output //100

주문 능력 증가의 이점

  • 증가된 주문 기능은 업무 수행에 필요한 기본 논리를 요약합니다. 예를 들어, 우리가 다음을 사용한 후 scale back() 기술적으로, 우리는 모든 요소를 ​​통해 반복하는 기본 논리를 추상화하고, 전체에 포함시키고, 결과를 반환했습니다. 우리는 반복 및 누적 논리를 명시적으로 쓰고 싶지 않았습니다. 스케일백 수행이 우리를 대신해 처리했습니다.
  • 고차 기능을 사용하면 루프로 동일한 성능을 구현하는 것보다 코드 가독성과 유지 관리성이 향상됩니다.
  • 주문 기능이 증가하면 코드의 재사용성도 높아집니다.

Tuts+로 JS 스포츠를 업그레이드하세요

결론

이 튜토리얼은 고차 기능을 소개하고 JavaScript 프로그래밍에 자주 사용되는 합리적인 예와 상황을 제공했습니다. 고차 기능을 개발 관행에 통합하면 JavaScript 개발자로서의 전문성을 상당히 향상시킬 수 있습니다.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *