程序员的信仰:最小的编码,做数最多的事

lxf2023-03-15 18:59:01

文中已经参与「 . 」

序言

在具体开发过程中,根据时间沉淀,一些老年人经常能写出一些让新手大吃一惊“神仙操作”,这些“神仙操作”一般简单吓人,却可以做很多事情,确实是让许多新手一头雾水。

做一件事时间久了,方法就有了。

下边再来一个场景剧场:

职场新人仔鱼:这煞笔是否写错,~~ str??(一看递交纪录大哥,捂着嘴巴)

......尝试尝试试着.......(大写的惊讶浮现出脸部)

职场新人仔鱼:“握草,握草,握草,这都可以?有点儿吓人!厉害!厉害!确实厉害!”(欣喜,哈哈,我懂得了,能够去跟小马仔装B了!迫不及待地想找一个小马仔装B的情绪谁懂?)

这样的画面迄今记忆犹新,一次又一次以后,仔鱼长大以后,成了老油子。下面小编为大家分享一下“神仙操作”合辑。

程序员的信仰是:最小的编码,做数最多的事。

应用领域

情景一:将一个字符串数组变为数据

正常操作

let str = '2'
console.log(Number(str))   //2

神仙操作一

let str = '2'
console.log(~~str)    //2

分析:

js含有~是按位取反计算,~~ 用于作双非按位取反计算

~~ 作用是除掉小数部分,针对正数,向下取整;针对负值,向上取整;与Math.floor()不一样的是,它只是简单的除掉小数部分,无论正负极也不会更改整数部分

非数据选值为0,它具体如下

~~null;      // => 0
~~undefined; // => 0
--NaN;       // => 0
~~0;         // => 0
~~{};        // => 0
~~[];        // => 0
~~(1/0);     // => 0
~~false;     // => 0
~~true;      // => 1
~~1.9;       // => 1
~~-1.9;      // => -1

神仙操作二

let str = '2'
console.log( str)    //2

分析:

JS里的 ' ' 号

当作为单眼运算符时, 运算符也不会对Number种类造成影响。那如果运用在字符串类型上,会把其转换为数字:

leta = 25;
a =  a;
console.log(a); //25
let b = '50';
console.log(typeofb);//String
b= b;
console.log(typeofb);//Number

通常使用 运算符能够迅速地将字符串数组转换为数字。但如果字符串字面量没法转换成得话,结论会出乎意料:

leta = 'kangkang';
a =  a;
console.log(a) //NaN
console.log(typeofa);//Number
let b = '';
b= b;
console.log(b); //0
console.log(typeofb);//Number

情景二:二维数组扁平化设计

正常操作

let arr = [1, [2, [3, 45]]];
function flatten(arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
console.log(flatten(arr))// [1, 2, 3, 4,5]

神仙操作

let arr = [1, [2, [3, 4]]]; 
console.log(arr.flat(Infinity)); // [1, 2, 3, 4,5]

分析

ES6里的flat 大家还可以直接启用 ES6 里的flat方式来完成二维数组扁平化设计。flat 方式的词法:arr.flat ( [depth] ) 在其中depthflat的参数,depth 是能够传送二维数组的进行深层(默认设置不填、标值是 1),即进行一层二维数组。假如叠加层数不确定性,主要参数能够传进 Infinity,意味着无论多少层都需要进行:

情景三:拓展操作符的应用

1.数组去重

let arr = [3, 5, 2, 2, 5, 5]; 
let setArr = new Set(arr)            // 回到set算法设计Set(3) {3, 5, 2} 
//方法一 es6的...结构 
let unique1 = [...setArr ];          //去重复转二维数组后 [3,5,2] 
//方法二 Array.from()分析类二维数组为数组 
let unique2 = Array.from(setArr )    //去重复转二维数组后 [3,5,2]

2.字符串数组去重复

let str = "352255"; 
let unique = [...new Set(str)].join(""); // 352

3.完成或且、联系、和差集

let a = new Set([1, 2, 3]); 
let b = new Set([4, 3, 2]); 
// 或且 
let union = new Set([...a, ...b]); // Set {1, 2, 3, 4} 
// 联系 
let intersect = new Set([...a].filter(x => b.has(x))); // set {2, 3} 
// (a 相较于 b 的)差集 
let difference = new Set([...a].filter(x => !b.has(x))); // Set {1}

4.将伪二维数组转化为数组

//伪二维数组转换成二维数组
var nodeList = document.querySelectorAll('div');
console.log([...nodeList]);  // [div, div, div ... ]

5.相互配合rest 操作符运用

function sumRest (...m) {
    var total = 0; 
    for(var i of m){
        total  = i;
    }
    return total;
}
console.log(sumRest(1,2,3));//6

6.数组排序

const sortNumbers = (...numbers) => numbers.sort();

情景四:网址置灰

CSSps滤镜 -webkit-filter

一行代码足够

html.gray-mode { filter: grayscale(.95); -webkit-filter: grayscale(.95); }
blur 模糊不清-webkit-filter:blur(2px);

brightness 色度-webkit-filter:brightness(25%);

contrast 饱和度-webkit-filter: contrast(50%);

drop-shadow 黑影-webkit-filter: drop-shadow(5px 5px 5px rgba(0, 0, 0, 0.5));

opacity 清晰度-webkit-filter: opacity(50%);

grayscale 灰度值-webkit-filter: grayscale(80%);

sepia 深褐色-webkit-filter: sepia(100%);

invert 反色-webkit-filter: invert(100%);

hue-rotate 色彩转动-webkit-filter:hue-rotate(180deg);

saturate 对比度-webkit-filter: saturate(1000%);

情景五:怎么写下好函数公式

1.默认参数-在您的函数中应用默认参数

防止在您的函数中应用短路标准来维持更清理。 更为关键的是,一定要记住,你函数公式只能为未声明的参数给予值,初始值不容易更换任何其他虚报值。

// BAD
function createMicrobrewery(name) {  
    const breweryName = name || "KangKang";  
    // ...
}
// GOOD
function createMicrobrewery(name = "KangKang") { 
    // ...
}

2.主要参数不要太多-恰当地应用函数调用

尽量把函数调用的数量限制在2个或较多 3 个。它可能必须那么多主要参数,有可能是你函数公式做得太多了。 可是,假如仍需要它,请选择 JavaScript 目标做为主要参数。 为了能让函数公式期待的特性越来越显著,可以用ES6结构词法。

// BAD
function createMenu(title, body, buttonText, cancellable) {  
    // ...
}
createMenu("Foo", "Bar", "Baz", true);
// GOOD 
function createMenu({ title, body, buttonText, cancellable }) {
    // ...
}
createMenu({  title: "Foo",  body: "Bar",  buttonText: "Baz",  cancellable: true});

3.单一职责原则-函数公式应当做一件事

别忘记函数的作用——给你的编码加上模块化设计。 每一个只实行一项任务的比较小函数公式将保证你编码便于撰写、评估和了解。 千万不要为单独功能设计好几个总体目标。

// BAD
function emailClients(clients) {
    clients.forEach(client => {    const clientRecord = database.lookup(client);
    if (clientRecord.isActive()) {      email(client);    }  });
}
// GOOD 
function emailActiveClients(clients) { 
    clients.filter(isActiveClient).forEach(email);
}
function isActiveClient(client) {
    const clientRecord = database.lookup(client);  return clientRecord.isActive();
}

未完待续...本文不断更新,倘若对大家有所帮助,能够敢于喜爱加一点赞!

彻底不够?以往精彩回顾

程序员的信仰:最小的编码,做数最多的事

学好这种鲜有人知的coding方法,此后很早下班了liao-JavaScript实战经验篇

程序员的信仰:最小的编码,做数最多的事 前面照片最优控制缩小计划方案

程序员的信仰:最小的编码,做数最多的事 Vue实战经验Element Table二次封装

结语

我就是凉城a,一个前面,喜爱技术性也享受生活。

与你相逢,我很高兴。

假如你想要了解更多,请点这儿,期待着你的小⭐⭐

  • 文章若有不正确,欢迎在评论区留言纠正,假如本文帮上你,热烈欢迎关注点赞与支持