JavaScript逻辑题小试牛刀
标签:
JavaScript
编程思维逻辑是无论写前端还是后端,写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);
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦