实用方法收录
(一)深拷贝 JSON.parse()实现
1
2
3
4
5
6
7/**
* 深拷贝 JSON.parse()实现
* @param {Object} obj 被拷贝的对象
*/
export function deepClone(obj) {
return JSON.parse(JSON.stringify(obj))
}(二)从对象中挑选需要的部分属性
1
2
3
4
5
6
7
8
9
10
11/**
* 从对象中挑选需要的部分属性
* @param {Object} obj 被挑选的对象
* @param {Array} arr 需要的属性列表
*/
export function pick(obj, arr) {
return arr.reduce((pre, cur) => {
cur in obj && (pre[cur] = obj[cur])
return pre
}, {})
}(三)模糊搜索
1
2
3
4
5
6
7
8/**
* 模糊搜索
* @param {String} queryStr 输入的搜索关键字
* @param {Array} sourceArr 数据源
*/
export function like(queryStr, sourceArr) {
return queryStr ? sourceArr.filter(item => item.toLowerCase().includes(queryStr.toLowerCase())) : sourceArr
}(四)数组去重 基本数据类型数组
1
2
3
4
5
6
7/**
* 数组去重 基本数据类型数组
* @param {Array} arr
*/
export function baseUniq(arr) {
return Array.from(new Set(arr))
}(五)数组去重 filter结合indexof实现去重
1
2
3
4
5
6
7/**
* 数组去重 filter结合indexof实现去重
* @param {Array} arr
*/
export function noRepeat(arr) {
return arr.filter((item, index, self) => self.indexOf(item) === index)
}(六)数组去重 reduce
1
2
3
4
5
6
7
8
9/**
* 数组去重 reduce
* @param {Array} arr
*/
export function Uniq(arr) {
return arr.redude((pre, cur) => {
return pre.includes(cur) ? pre : [...pre, cur]
}, [])
}(七)数组分割 将一维数组分割成二维数组
1
2
3
4
5
6
7
8
9
10
11/**
* 数组分割 将一维数组分割成二维数组
* @param {Array} arr
* @param {Number} size
*/
export function Chunk(arr, size = 1) {
return arr.length ? arr.reduce((pre, cur) => {
pre[pre.length - 1].length === size ? pre.push([cur]) : pre[pre.length - 1].push(cur)
return pre
}, [[]]) : []
}(八)数组降维 (任意维度)
1
2
3
4
5
6
7
8
9/**
* 数组降维 (任意维度)
* @param {Array} arr
*/
export function Flat(arr = []) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? Flat(cur) : cur)
}, [])
}(九)数组过滤
1
2
3
4
5
6
7
8
9
10
11/**
* 数组过滤
* @param {Array} target
* @param {Array} unNeedAttributes
*/
export function Difference(target, unNeedAttributes) {
return target.reduce((pre, cur) => {
!unNeedAttributes.includes(cur) && pre.push(cur)
return pre
}, [])
}(十)数组成员特性分组 按某个key值 如: 按地区分组
1
2
3
4
5
6
7
8
9
10
11
12/**
* 数组成员特性分组 按某个key值 如: 按地区分组
* @param {Array} arr
* @param {String} key
*/
export function Group(arr, key) {
return key ? arr.reduce((pre, cur) => {
!pre[cur[key]] && (pre[cur[key]] = [])
pre[cur[key]].push(cur)
return pre
}, {}) : {}
}(十一)字符串翻转
1
2
3
4
5
6
7/**
* 字符串翻转
* @param {String} str
*/
export function ReverseStr(str = '') {
return str.split('').reduceRight((pre, cur) => pre + cur)
}(十二)斐波那契数列 从第3个数开始 每个数都是前2个的和
1
2
3
4
5
6
7
8
9
10
11
12/**
* 斐波那契数列 从第3个数开始 每个数都是前2个的和
* @param {Number} first
* @param {Number} second
* @param {Number} len
*/
export function Fibonacci(first = 0, second = 1, len = 2) {
const arr = [...new Array(len).keys()]
return arr.reduce((pre, cur) => {
cur > 1 && pre.push(pre[cur - 1] + pre[cur - 2])
}, [first, second])
}