整理的一些干货技巧| ES6等!

56 阅读3分钟

13282480027425758.jpg

前言

本人是个切图仔,在写项目过程中,很多知识不常用就会忘记,所以我决定开始写文档,一是方便自己以后查看,二是也能为别人提供点参考。 话不多说,上车!

ES6 高阶用法

reduce()方法的使用技巧

1.二维数组转为一维数组

let array = [
  [1, 2],
  [3, 4],
  [5, 6],
].reduce((pre, next) => {
  return pre.concat(next);
}, []);
console.log(array); // [1, 2, 3, 4, 5, 6]

2.多维数组 扁平化

const arr = [1, [[2, 3], 4],5]
const flatten = (arr) =>{
  return arr.reduce((pre, cur) =>{
    return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
  },[])
};
console.log(flatten(arr)) [ 1, 2, 3, 4, 5 ]
---------------------------------
// 注: flat 方法的语法:arr.flat ( [depth] ) 其中depth是flat的参数,
depth 是可以传递数组的展开深度(默认不填、数值是 1),即展开一层数组。
如果层数不确定,参数可以传进 Infinity,代表不论多少层都要展开;
```javascript
let arr = [1,[2,[3,4,5]]]
console.log(arr.flat(Infinity)) //[ 1, 2, 3, 4, 5 ]
> 3.求和的方法

```javascript
let total = [2, 3, 4].reduce((pre, next) => {
  return pre + next;
}, 0);
console.log(total); // 9

4.获取数组中每个元素出现的次数

 //字符串可以先拆分为数组
const list = 'abcabc'.split('') //['a', 'b', 'c','a', 'b', 'c']

let letters = ['aa', 'bb', 'cc', 'aa', 'bb'];
const countLetters = letters.reduce((allLetters, letter) => {
  if (allLetters[letter]) {
    allLetters[letter] ++;
  } else {
    allLetters[letter] = 1;
  }
  return allLetters;
}, {});
console.log(countLetters)  // { aa: 2, bb: 2, cc: 1 }
---------------------------------------------
const arraySum = (arr, val) => arr.reduce((acc, cur) => {
return cur == val ? acc + 1 : acc + 0
}, 0);
let arr = [ 0, 1, 3, 0, 2, 0, 2, 3 ];
console.log(arraySum(arr,0)) //3

5.数组对象去重

let arr = [
    {name: 'html', id:1},
    {name: 'javascript', id:2},
    {name: 'html', id:3},
    {name: 'javascript', id:4},
]
//第一种
let obj = {}
let open = arr.reduce((pre,cur) => {
    obj[cur.name] ? '' : obj[cur.name] = true && pre.push(cur)
        return pre
},[]);
console.log(open) [ { name: 'html', id: 1 }, { name: 'javascript', id: 2 } ],
//第二种 扩展:
const newMap=new Map()
const newArrTwo=arr.filter(item=>
  !newMap.has(item.id) && newMap.set(item.id,1)
)
console.log(newArrTwo) //[ { name: 'html', id: 1 }, { name: 'javascript', id: 2 } ]

一些简单实用技巧

1.扩展运算符

let arr = [1,2,3,4,4,4,5,6,6,7];
console.log([...new Set(arr)]) //[1, 2, 3, 4, 5, 6, 7]
console.log([...new Set(arr)].join(""))  //1234567
console.log(new Set(arr))     // {1, 2, 3, 4, 5, …}
//附 合并
console.log([...[1, 2, 3], ...[2, 3, 4]]); // [1,2,3,2,3,4]

2.includes方法
此方法用于判断字符串是否包含指定的子字符串,或者判断数组中是否有指定的元素。

//Array.includes() 返回true/false,参数1为给定值,参数2为开始查找的位置
//Array.indexOf() 不够语义化 查找第一次出现的位置,所以要比较是否不等于-1,内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。

[1, 2, 3].includes(2) // true
[1, 2, 3].includes(4) // false
[1, 2, NaN].includes(NaN) // true

干货分享

计算相差多少天

//注: 86400000为一天的毫秒数
const dayDiff = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000);

console.log(dayDiff(new Date("2023-02-01"),new Date("2023-02-14"))); //13

前端传值技巧

后端大哥说了,我只要a字段和c字段,其他多余字段给我后端,会报错,于是你就重新组装

const params = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
};
// 钻石级别组装
const { a, c } = params;
const param = { a, c };

// 王者级别组装
const { b, d, ...param } = params; // b和d字段是你需求排除的字段。params:{a:1,c:3}。

快速清空 vue data 里某个对象/数组里的值

方法一:
// 可以将初始状态的data复制到当前状态的data,实现重置效果
Object.assign(this.$data, this.$options.data())

// 如果你再data中获取了router的传值:this.$route.query,用this.$options.data()重置组件data时,data()里用this获取的props或method都为undefined解决办法如下。

Object.assign(this.$data, this.$options.data.call(this));

方法二:
// 在大多数情况下,我们并不需要重置data中所有的数据,而只是需要重置data中的某一个对象或者属性:
this.form = this.$options.data().form

方法三:
// 清空对象: (主要用于form表单)Element
this.$refs.uploadForm.resetFields();
// 清空数组:
this.arrayList.splice(0, this.arrayList.length);

el-input 限制输入框只能输入数字

<el-input v-model.number="num"  onkeyup="this.value = this.value.replace(/[^\d.]/g,'');"></el-input>

el-input type=number 去除聚焦时的上下箭头

<style scoped>
.clear-number-input ::v-deep input[type="number"]::-webkit-outer-spin-button,
.clear-number-input ::v-deep input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none !important;
}
</style>

避免不需要的三元表达式

// bad
const foo = a ? a : b;
const bar = c ? true : false;
const baz = c ? false : true;

// good
const foo = a || b;
const bar = !!c;
const baz = !c;

闲聊一下

如果你有更多干货/小技巧,欢迎下方讨论。 留个赞再走呀!

59d6f9d6-b12e-4a06-ac79-3f5a5487d3a8.png