常用数组方法
数组去重
function uniqueArr(arr){
return [...new Set(arr)]
}
数组合并去重
let arr1 = ['1', '2', '3', 3]
let arr2 = ['2', '3', 4, 5]
let arr = [...arr1, ...arr2]
arr = Array.from(new Set(arr));
多维数组转一维数组(降维)
使用es6的flat()方法
let arr = [1,[2,3],4,[5,6]];
console.log( arr.flat() )
//[1,2,3,4,5,6]
flat()默认是拉平一层,但是要想拉平多层且我们不知道该数组的是几维数组时,我们可以用Infinity作为参数,可以实现多维数组转换为一维数组
let arr = [1,[2,[3,4]],5,6]
console.log( arr.flat(Infinity) )
或者console.log( arr.flat(1) )
// [1,2,3,4,5,6]
但是要注意,因为flat()方法为es6的方法,在平时写代码时要注意有些手机对于es6的代码时不支持的,需要编译的,切忌踩这个坑。
一维数组去重
/**
* 思路:获取没重复的最右一值放入新数组
* 从第一个值开始,将其与后面的值依次比较,
* 如若相等则终止当前循环并进入顶层循环的下一轮判断
*/
function uniq(array) {
var temp = []
var index = []
var i = array.length
for (var i = 0;i < l;i ++){
for(var j = i + 1; j < l;j ++){
if (array[i] === array[j]) {
i ++
j = i
}
}
temp.push(array[i])
index.push[i]
}
return temp
}
var arr = [1,2,7,3,5,2,3,2]
console.log(uniq(arr))
多维数组去重
var temp = []
function uniq(array){
var result = []
recursion(array) // 调用递归将多维数组变为一维数组再去重
for (var i = 0, len = temp.length;i < len;i ++){
for(var j = i + 1; j < len;j ++){
if (temp[i] === temp[j]) {
i ++
j = i
}
}
result.push(temp[i])
}
return result
}
// 新增递归函数
function recursion(array){
var len = array.length
for (var i = 0; i < len ;i ++) {
if (typeof array[i] == 'object') { // 如若数组元素类型是object,则递归
recursion(array[i])
} else {
temp.push(array[i]) // 否则添加到temp数组中
}
}
}
var arr = [1,[2,3],[3,2,[1,6,[3,5,'3']]]]
console.log(uniq(arr))
(文中多维数组方法) 转载 原文来源:CSDN 作者:AHRL__
查找数组中符合查找元素的下标
indexOf() 方法可返回数组中某个指定的元素位置。
但是只能在第一层查找相等的值
数组去重 es6(arr.filter() + indexOf())
let arr = [1,2,4,1,2,3,4,5,5,6]
arr = arr.filter((value, index, arr => arr.indexOf(value) === index)
数组克隆
数组克隆的几种办法
const clone = (arr) => arr.slice(0);
const clone = (arr) => [...arr];
const clone = (arr) => Array.from(arr);
const clone = (arr) => arr.map((x) => x);
const clone = (arr) => JSON.parse(JSON.stringify(arr));
const clone = (arr) => arr.concat([]);
const clone = (arr) => structuredClone(arr);
检测对象是否为空
function isEmpty(obj){
return Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;
}
判断参数是否为函数
function isFunction(v){
return ['[object Function]', '[object GeneratorFunction]', '[object AsyncFunction]', '[object Promise]'].includes(Object.prototype.toString.call(v));
}
(补充中。。。)