廖雪峰博客高阶函数的答案

廖雪峰博客高阶函数的答案:

selfHigherOrderFn: function () {
            // demo1 求和
            function sum (fn, ...num1) {
                const nums = Array.from(arguments).slice(1);
                let total = 0;
                nums.forEach((item, index, arr) => {
                    console.log('forEach item: ', item);
                    total += fn(item);
                });
                console.log('argument: ', arguments, 'nums: ', nums);
                return total;
            }
            const result = sum(Math.abs, -2, 1, 3, 4);
            console.log('result: ', result);

            // demo2 任意一字符串转化为首字母大写
            function capitalize (str) {
                str = str.toString().toLowerCase();
                return str[0].toUpperCase() + str.substring(1);
            }

            function stringFormat(fn, str) {
                return fn(str);
            }

            const str = stringFormat(capitalize, 'stEsdsdB');
            console.log('str: ', str);
        },
        arrayHigherOrderFn: function () {
            // Array.prototype.map
            const arr = [1, 3, 23, 5, 8, 10];
            let resultArr = arr.map((item, index, arr) => {
                return item * item;
            });
            console.log('Array.prototype.map resultArr: ', resultArr);

            // Array.prototype.reduce
            let sum = arr.reduce((total, item, index, arr) => {
                return total + item;
            });
            let sum2 = arr.reduce((total, item, index, arr) => {
                return total + item;
            }, 2);
            console.log('Array.prototype.reduce sum: ', sum, ', sum2:', sum2);

            const _self = this;
            function product (arr) {
                return _self.TB.isArray(arr) ? arr.reduce((total, item, index, arr) => {
                    return total * item;
                }, 1) : 0;
            }

            let _product = product([2, 4, 3, 5]);
            console.log('the product of arr: ', _product);

            // 不要使用JavaScript内置的parseInt()函数,利用mapreduce操作实现一个string2int()函数
            function string2int(str) {
                const arr = str.split('');
                return arr.map((item, index, arr) => {
                    return item - 0;
                }).reduce((total, item, index, arr) => {
                    return total * 10 + item;
                });
            }

            let result = string2int('323422');
            console.log('string2int result: ', result, ', result type: ', typeof(result));

            // 请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。
            function capitalize (str) {
                return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
            }

            function formatStringArray (arr) {
                return arr.map((item, index, arr) => {
                    return capitalize(item);
                });
            }

            let formatResult = formatStringArray(['adam', 'LISA', 'barT']);
            console.log('formatStringArray result: ', formatResult);

            /*
            *小明希望利用map()把字符串变成整数,他写的代码很简洁
            *var arr = ['1', '2', '3'];
            *var r;
            *r = arr.map(parseInt);
            *结果竟然是1, NaN, NaN,小明百思不得其解,请帮他找到原因并修正代码。
            *
            *分析:
            *首先map函数的形式arr.map((item, index, arr) => {}, thisArg);
            *item表示数组的每个元素,index表示数组的下标,arr表示数组本身,thisArg表示this的指向
            *现在再看parseInt函数parseInt(str, raIndex)
            *str表示待转换数字的字符串,raIndex表示转换为几进制(2-36之间的是2的指数的数字)
            *所以上面的函数的遍历过程是:
            *parseInt('1', 0); //0表示没有,直接转换为默认的10进制正数:1
            *parseInt('2', 1); //没有1进制: NaN
            *parseInt('3', 2); //二进制,但是二进制中没有3:,只有1和0:NaN
            *
            */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值