flat();数组扁平化(把数组中的多个数组合并成一个数组)
var a = [1,2,[2,3,4],5,6,7[5,4,67]];
a.flat();//[1,2,2,3,4,5,6,7,5,4,67];
//实现如下
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
实质是利用递归和数组合并方法 concat实现扁平。
from,Set,...扩展运算符实现数组去重
var a = [1,1,1,1,2,2,3,4,5,6,5,4,3,2,41];
var b = Array.from(new Set(a));
b = [...new Set(a)];//效果和from一样
set是ES6新出来的一种一种定义不重复数组的数据类型。
Array.from是将类数组转化为数组。
...是扩展运算符,将set里面的值转化为字符串。
//实现如下取新数组存值,循环两个数组值相比较。
Array.prototype.mydistinct = function () {
var arr = [];
for (var i = 0;i<this.length;i++) {
for (var j = i + 1; j<this.length;j++) {
if (this[i] === this[j]) {
j = ++i;
}
}
arr.push(this[i])
}
return arr;
}
排序
var a =[1,2,3,4]
a.sort((a,b)=> a - b);//升序
a.sort((a,b)=> b - a);//降序
最大最小值
var a =[1,2,3,4];
Math.max(...a) || Math.min(...a)
Math.min.apply(this,a) || Math.max.apply(this,a)
求和
var a =[1,2,3,4];
a.reduce((a,b) => a+b)
reduce是ES5的数组api,参数有函数和默认初始值。
函数有四个参数:
pre:上一次的返回值
cur:当前值
curIndex:当前值索引
arr:当前数组
合并
var a =[1,2,3,4],b=[5,6,7,8];
var c = [...a,...b]
var d = a.concat(b)
判断是否包含值
var b=[5,6,7,8];
b.includes(5);
b.indexOf(3);//-1 如果存在换回索引
b.find(item => item === 5)//5 如果数组中无值返回undefined
b.findIndex(item => item === 5) //如果数组中无值返回-1有值返回索引
b.some( item => item === 5);//存在就返回true无返回false
类数组转换
...扩展运算符
每一项设置值
var b=[5,6,7,8];
b.fill(2);
每一项是否满足
var b = [5,6,7,8]
b.every( i => typeof i === 'number')
过滤删选
var b = ['4',5,6,7,8];
b.filter( i => typeof i === 'number')//[5,6,7,8]
对象和数组转化
var a = {name:'金毛',age:20}
Object.keys(a)//[name,age]
Object.values(a)//['金毛',20]
Object.entries(a)//[name,'金毛'],[age,20]
数组增删
var a = { name: "aaa", age: 66 },
b = { name: "bbb", age: 55 },
c = { name: "ccc", age: 44 },
d = { name: "ddd", age: 33 },
e = { name: "eee", age: 22 },
f = { name: "fff", age: 11 };
var arr = [a, b, c, d, e, f]; //原始数据
var arr1 = [a, c, f]; //需要处理的数据
//数组操作
const delArray = (initarr, oparr, index = 1) => {
!Array.isArray(oparr) && (oparr = [oparr]);
oparr.forEach(value => {
if (initarr.indexOf(value) !== -1)
initarr.splice(initarr.indexOf(value), index);
});
};
const addArray = (initarr, oparr) => {
!Array.isArray(oparr) && (oparr = [oparr]);
oparr.forEach(value => {
if (initarr.indexOf(value) === -1)
initarr.push(value);
});
};
location关键字获取
let str = location.search;
function urlSearch(str){
let obj = {}
if(str){
str = decodeURIComponent(str).substring(1).split('&');
str.forEach(v=>{
v = v.split('=');
obj[v[0]]=v[1];
})
}
return obj
}
随机数
function selectFrom(minValue, maxValue) {
var choices = maxValue - minValue + 1;
return Math.floor(Math.random() * choices + minValue);
}