继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JavaScript逻辑题小试牛刀

dorseyCh
关注TA
已关注
手记 50
粉丝 1.3万
获赞 1519

  编程思维逻辑是无论写前端还是后端,写JavaScript还是C、Java或python等等其他语言,都离不开编程的逻辑思维。有时候可能就是一些数据结构的处理,一些数据流的走向的思路,或者某种巧妙的构思。

  1、转换颜色 —— rgb(255, 255, 255) => #ffffff

  我们在写CSS的时候,可以写#FFFFFF,也可以写rgb或rgba,这之间是如何转化的呢?
  第一种的思路通过split:

const tranColor = colorStr => {

    let arr = colorStr.split('rgb(')[1].split(')')[0].split(',').map(item => Number(item.trim()).toString(16));

    return '#' + arr.join('');
}
tranColor('rgb(255,255,255)');

  第二种思路则是正则:

const tranColor = colorStr => {

	let arr = colorStr.match(/(?<=^rgb\().*?(?=\))/g)[0].split(',').map(item => Number(item.trim()).toString(16));

	return '#' + arr.join('');
}
return tranColor('rgb(255, 255, 255)');

  2、单词原位反转。比如hello world => olleh dlrow

  第一种解决办法:
  解决的逻辑其实比较直观,直接就是将一个个的单词先当做一个个的单元映射出来后,每个单元做一次reverse。

const situReverse_0 = str => str.split(' ').map(item => item.split('').reverse().join('')).join(' ');

  第二种解决办法:
  解决的方式就比较巧妙了,虽然也是通过字符单元倒置,但变换的过程却是:

hello world
['hello', 'world']
['world', 'hello']
world hello
['w','o','r','l','d',' ','h', 'e', 'l', 'l', 'o']
['o','l','l','e','h',' ','d', 'l', 'r', 'o', 'w']
olleh dlrow

  这里无论句子有多少个单词,也只会split两次,相比于第一种理论上性能无疑更优,虽然说可读性可能稍微差一些,但这却是对数组与字符串较深层次结构解剖的一种方式,也是更加巧妙的一种方式。第二种的代码如下:

const situReverse = str => str.split(' ').reverse().join(' ').split('').reverse().join('');

  3、红绿灯——绿灯亮3秒,然后红灯亮3秒,然后黄灯再亮3秒。灯亮过程可以用console表示。

  代码如下:

class led {

    constructor () {

        this.colorList = ['红', '绿', '蓝'];
        this.index = 0;
        this.light(this.index);
    }
    light (color) {
        console.log(color);
        this.delay();
    }
    delay () {

        let _self = this;
        this.index ++;
        this.index = this.index % 3;
        setTimeout(() => { _self.light(_self.colorList[_self.index]) }, 3000);
    }
}

  4、浮点数左边的数每三位添加逗号。

比如说:1234567.50 => 1,234,567.50
思路其实有不少,但最简单的莫过于正则啦:

const addComma_0 = number => {

    return number.toString().split('.')[0].split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('').replace(/^,/, '') + '.' + number.toString().split('.')[1];
}
console.log(addComma_0(2131231.32));

  5、编写一个函数fn(Number n),将一个整数的数字转为大写输出,如输入123,输出一百二十三,数字上限:1000亿以下

  这个在金融领域很常见。主要的解决思路就是字典,不断的扣字典。代码如下:

const fn = number => {

    let arr = ['零','一', '二', '三', '四', '五', '六', '七', '八', '九'];

    let arr1 = ['个', '十', '百', '千'],
        arr2 = ['万', '亿'];

    let res = [], index = 0, index1 = 0;

    while(number > 0) {

        res.push( number % 10 !== 0 ? arr[number % 10] + arr1[index] : arr[number % 10]);

        index = ++ index === 4 ? ( res.push(arr2 [index1]), index1 ++, 0 ) : index;

        number = Math.floor( number / 10 );

    }
    return res.reverse().join('').replace(/个/g, '');
}
fn(212133021314);
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP