JavaScript学习笔记1

版权声明:随意转载,转载请注明出处。 https://blog.csdn.net/qq_36258516/article/details/85737895

JavaScript学习笔记

问题描述(来自廖雪峰官网):

  想办法把一个字符串13579先变成Array——[1, 3, 5, 7, 9],再利用reduce()就可以写出一个把字符串转换为Number的函数。不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:

'use strict';

function string2int(s) {
  /*需要填充的部分*/
}

// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        console.log('请勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        console.log('请勿使用Number()!');
    } else {
        console.log('测试通过!');
    }
}
else {
    console.log('测试失败!');
}

思路:

  我们需要明确这个函数传递进来的参数以及返回值是什么,即传递过来的参数是一个需要转换的字符串,返回值是字符串转换成的整数。

  这里就很容易想到一个思路。我们需要把s字符串拆开,变成字符数组,再将字符数组转换成整型数组,最后再通过整形数组求出最终返回值。明确了思路我们就可以开始写代码了。

  首先是拆分,JavaScript里面有个split()函数,可以直接拆分。于是可以写出以下代码。

var arr=s.split('');/*将s字符串拆开,存入arr数组中*/

  其次是将其变成整型数组。

arr=arr.map(function (x) {
        return x-'0';
    })
//题目要求使用map,这里正好使用map方法,使用map可以省去循环,作用于数组里每个元素。

  接着就是转换成返回值。

arr=arr.reduce(function (x,y) {
        return x*10+y;
    })
//reduce()把结果继续和序列的下一个元素做累积计算,同样这里省去了循环。

  最后别忘了返回值。

return arr;

最终代码:

function string2int(s) {
    var arr=s.split('');
    arr=arr.map(function (x) {
        return x-'0';
    })
    arr=arr.reduce(function (x,y) {
        return x*10+y;
    })
    return arr;
}

// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        console.log('请勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        console.log('请勿使用Number()!');
    } else {
        console.log('测试通过!');
    }
}
else {
    console.log('测试失败!');
}

附个简单版:

function string2int(s) {
    if(s.length===1) return s-'0';/*若长度是1就直接返回,reduce()至少要两个参数*/
    var arr=s.split('').reduce(function (x,y) {
        return (x-'0')*10+(y-'0');
    })
    return arr;
}

// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        console.log('请勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        console.log('请勿使用Number()!');
    } else {
        console.log('测试通过!');
    }
}
else {
    console.log('测试失败!');
}

猜你喜欢

转载自blog.csdn.net/qq_36258516/article/details/85737895
今日推荐