js 알고리즘 초기 엿 보기 06 (알고리즘 모드 03 - 함수 식 프로 그래 밍)

12139 단어
함수 식 프로 그래 밍 이 무엇 인지 설명 하기 전에 우 리 는 먼저 명령 식 프로 그래 밍 이 무엇 인지 말 해 야 한다. 그들 은 모두 프로 그래 밍 패 러 다 임 의 하나 에 속한다.명령 식 프로 그래 밍 은 사실 우리 가 실행 해 야 할 논리 나 판단 또는 연산 을 포함 하 는 하나의 코드 이다.우리 가 필요 로 하 는 논 리 를 차근차근 완성 하 는 것 이다.함수 식 프로 그래 밍 은 한 함수 와 같은 함수 호출 이다.우 리 는 코드 를 보고 함수 식 프로 그래 밍 과 명령 식 프로 그래 밍 의 차 이 를 더욱 분명하게 이해 합 니 다.
//     
var printArray = function (array) {
    for (var i = 0; i < array.length; i++) {
        console.log(array[i])
    }
}
printArray([1,2,3,4,5]);
//   
var forEach = function (array,action) {
    for (var i = 0; i < array.length; i++) {
        action(array[i])
    }
}

var logItem = function (item) {
    console.log(item)
}

forEach([2,3,4,5,6],logItem)

우 리 는 먼저 위의 코드 가 무엇 을 했 는 지 살 펴 보 자. "배열 을 옮 겨 다 니 고 배열 의 모든 항목 을 인쇄 하 자."명령 식 프로 그래 밍 에서 우 리 는 이 말 을 한 걸음 한 걸음 완성 했다.먼저 배열 을 옮 겨 다 니 고 모든 요 소 를 인쇄 합 니 다.그러면 우 리 는 함수 식 프로 그래 밍 을 살 펴 보 겠 습 니 다. 우 리 는 먼저 두 개의 함 수 를 설 명 했 습 니 다. 하 나 는 배열 요 소 를 옮 겨 다 니 는 foreach (이곳 의 action 매개 변 수 는 사실은 하나의 반전 함수) 이 고 하 나 는 모든 항목 을 인쇄 하 는 logItem 입 니 다.우 리 는 모든 단계 의 조작 이 필요 한 논 리 를 함수 로 구분 하고 마지막 에 함 수 를 호출 하여 연산 을 집행 한다.
ES6 가 생 긴 후에 우 리 는 함수 식 프로 그래 밍 패 러 다 임 으로 우리 의 코드 를 더욱 편리 하 게 작성 할 수 있 습 니 다. 다음은 예 를 들 어 보 겠 습 니 다.
//           
//      ,                    minVal  
//                    minVal  ,     minVal array[i]   ,    minVal   array[i];
//      
var findMinValInArray = function (array) {
    var minVal = array[0];
    for (var i = 1; i < array.length; i++) {
        if(minVal > array[i]) {
            minVal = array[i];
        }
    }
    return minVal;
}
console.log(findMinValInArray([7,8,9,5,31,2]));
//                   ,  Math.min       (...)
const _min = function (array) {
    return Math.min(...array);
}
console.log(_min([5,6,9,3,1]));
//      ES6     ,           。
const min = arr => Math.min(...arr);
console.log(min([2,3,9,4,8]))

위의 코드 에서 Math. min 은 하나의 방법 으로 매개 변수 중의 최소 값 을 되 돌려 주 고 매개 변 수 는 무한 개 일 수 있 습 니 다.그럼 ES6 의 화살표 함수 와 확장 연산 자 (...) 도 있 습 니 다.여기에 상세 한 설명 을 하지 않 고 연결 주 소 를 첨부 하면 화살표 함수 와 확장 연산 자가 무엇 인지 더욱 상세 하 게 알 수 있 습 니 다.
그러면 우리 가 앞에서 배 운 배열 방법 을 어떻게 이용 하여 우리 의 코드 를 더욱 '함수 식' 으로 만 드 는 지 살 펴 보 자.
//              
var daysOfWeek = [
    {name:"Monday",value:1},
    {name:"Tuesday",value:2},
    {name:"Wednesday",value:7},
]
var daysOfWeekValues_ = [];
for (var i = 0; i < daysOfWeek.length; i++) {
    daysOfWeekValues_.push(daysOfWeek[i].value);
}

//            
var daysOfWeekValues = daysOfWeek.map(function (day) {
    //  day           ,             map   
    return day.value;
})
console.log(daysOfWeekValues);

//       filter         。
//
//   
var positiveNumbers_ = function (array) {
    var positive = [];
    for (var i = 0; i < array.length; i++) {
        if(array[i] >= 0) {
            positive.push(array[i]);
        }
    }

    return positive;
}
console.log(positiveNumbers_([-1,2,1,-2]));
//   
var positiveNumbers = function (array) {
    return array.filter(function (num) {
        return num >= 0;
    })
}

console.log(positiveNumbers([1,2,-1,-2,-5]));

//      reduce  
//   
var sumValues = function (array) {
    var total = array[0];
    for (var i = 1; i < array.length; i++) {
        total += array[i];
    }
    return total;
}
console.log(sumValues([1,2,3,4,5]));
//   
var sum_ = function (array) {
    return array.reduce(function (a,b) {
        return a + b;
    })
}

console.log(sum_([1,2,3,4,5]))
//      ES6       
var sum = arr => arr.reduce((a,b) => a + b);
console.log(sum([1,2,3,4,5]))

위 에서 우 리 는 함수 식 프로 그래 밍 의 예 를 보 았 는데 코드 가 복잡 하지 않 아서 쉽게 이해 할 수 있다.그래서 자세 한 설명 을 안 했 어 요.그럼 마지막 재 미 있 는 예 를 보 겠 습 니 다.
//                           
var mergeArrays_ = function (arrays) {
    var count = arrays.length,
    newArray = [],
    k = 0;

    for (var i = 0; i < count; i++) {
        for (var j = 0; j < arrays[i].length; j++) {
            newArray[k++] = arrays[i][j];
        }
    }
    return newArray;
}

console.log(mergeArrays_([[1,2,3],[4,5],[6]]));

//             
var mergeArraysConcat = function (arrays) {
    return arrays.reduce(function (p,n) {
        return p.concat(n);
    })
};
console.log(mergeArraysConcat([[1,2,3],[4,5],[6],[7]]))

//           
const mergeArrays = (...arrays) => [].concat(...arrays);
console.log(mergeArrays([1,2,3],[4,5],[6],[7],[8]));
//          。     (...arrays)     
console.log(...[[1,2,3],[4,5],[6],[7],[8]])//         
//                              

여기까지 우리 함수 식 프로 그래 밍 의 간단 한 설명 은 끝 났 습 니 다. 위의 내용 은 사실 만 분 의 1 에 불과 합 니 다. 코드 의 작성 에 대해 다른 창문 을 열 수 있 기 를 바 랍 니 다. 사실은 함수 식 프로 그래 밍 은 우리 의 실제 작업 에서 도 매우 유용 합 니 다.여러분 들 이 진지 하 게 대하 고 공부 하 시 기 를 바 랍 니 다. 마지막 으로 함수 식 프로 그래 밍 을 배 울 수 있 는 인터넷 주 소 를 동봉 합 니 다.http://reactivex.io/learnrx/。이것 은 외국 의 연습 사이트 로 간단 한 영 어 를 볼 수만 있다 면 문제 가 없 을 것 이다.
  
마지막 으로 본인 의 수준 이 제한 되 어 있 기 때문에 능력 과 큰 신 은 아직도 차이 가 많 습 니 다. 만약 에 잘못 이 있 거나 불분명 한 점 이 있 으 면 여러분 께 서 아낌없이 가르침 을 주시 기 바 랍 니 다.대단히 감사합니다!

좋은 웹페이지 즐겨찾기