看起来有点整活的代码

阴间代码

有时候会觉得自己写代码,有一股整活的味道,但是一看也挺有意思的。于是就记录下来,有些比较奇思妙想,当然更多的时候我会觉得自己写的比较阴间。

多用三目

单一取值字典比switch强,单一状态判断三目比if强,三目,永远的神!

我们来看这么一段代码

let msg = ''
if(code === 200 ){
    msg = 'success'
}else{
    msg = 'fail'
}

这种情况就是简单的直接的const msg = code === 200?'success':'fail' ;这种肯定会有人去说“就这?”

const category = msg==='success'?arr[index + 1]: arr[index -1];

这种其实也写很好的,但是我们来让这行代码更短一些

const category = arr[index +( msg==='success' ? 1: -1 )];

是不是更短了? 有没有感觉到不利于阅读?

这就是我把这步骤称为阴间的原因,虽然这么写节省了一些东西,却让代码的可读性下降了。这点是好是坏诸君自辨。

拿副作用当正作用

万艾可的故事。

我们来预设一个场景,有字段commnet_A_wechat,需求是取出最后一段_后的字符wechat,咱们正常的思路就是先分割,然后将返回的数组取最后一段。如下面这段代码:

const getLastSegment = (str) => {
    const arr = str.split('_');
    return arr[arr.length - 1];
}

那我们有没有比较阴间的写法呢? 有

const getLastSegment = (str) => str.split('_').pop();

运用新Api

提问:怎么将 [{value:number,title:string}] 这样的数组变成 {value:title}

eg: [{value:1,title:'高中数学'}]; => {175:'高中数学'}

常见解法:Map

let arr = [{value:1,title:'高中数学'}]
const flat = (arr) => {
    let obj = {}; 
    arr.map(x => obj[x.value] = x.title);
    return obj
}

这么解很直观,但是我们为此声明了一个临时变量来处理,显得不怎么好看。更严重的是我们跑题了,使用map解出来的array而不是object。于是我改用下面这种写法;

// 没写单独的方法
let arr = [{value:1,title:'高中数学'}];
arr.reduce((accumulator,currentValue) => {
    accumulator[currentValue.value] = currentValue.title; 
    return accumulator 
},{});

这种方式我认为阴间的点是,reduce 相较于 map之流并不是大家所熟知的 api ,使用这种容易为难你的同事。
但还可以再简(yin)洁(jian)一点:

// 没写单独的方法
let arr = [{value:1,title:'高中数学'}];
arr.reduce((prev,{value,title}) => ({ ...prev, [value]: title,}),{});

解构让代码一行搞定。

取出csv文件中文件中的第X列数据是否相同

// code 前略
const { result } = file;
result.split('
')/* 使用 
 切换回车切割成一行数组  **/
	.filter((x,i) => i > 0) /* 去掉第一行数据(列头) **/
    .map((x,i) => (x.split(','))[0] )/* 取出逗号分割,拿出第一列 **/
    .every((item,index,array) => (item === array[1] ));/* 判断每一格是否相同(与第一格相同) **/

这行代码其实没有什么参考性,此代码的目的是灵活使用Array提供的方法进行链式调用

参考:

原文地址:https://www.cnblogs.com/Molyp/p/14326767.html