1.some 和 every的区别
const list = [
{name:'张三',back:"false"},
{name:'李四',back:"true"},
{name:'王五',back:"false"},
]
const a = list.some(item=>item.back)
console.log(a);//true
const b = list.every(item=>!item.back)
console.log(b);//false
二者是用来做数组条件判断的,都会返回一个布尔值
some: 有一个元素满足条件返回true, 循环中断,所有元素不满足条件返回false;
every: 刚好与some相反,有一元素满足条件返回false,循环中断,所有元素满足条件返回true;
2.去重
let a = [1,1,3,4,5,3,5,3,5]
const b =[...new Set(a)]
console.log(b);//[ 1, 3, 4, 5 ]
3.数组对象去重
var arr = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4},
{name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}];
var temp=[]; 方法2引用
var obj={}; //方法3引用
function removal() {
方法1: es5冒泡排序法,去重arr
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i].name == arr[j].name) {
arr.splice(j, 1);
//因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
j--;
}
}
}
return arr;
方法2:es5新建数据双重循环,去重arr2
arr.forEach(item1 => {
const check= temp.every((item2)=>{
return item1.name !== item2.name;
})
check?temp.push(item1):''
});
return temp;
方法3:es5 对象法去重arr
arr = arr.reduce((a,b)=>{
obj[b.name]?'':obj[b.name] = true && a.push(b);
return a;
},[])
return arr;
}
var newArr = removal();
console.log(newArr);//[ { name: 'a', id: 1 },{ name: 'b', id: 3 },{ name: 'c', id: 4 }, { name: 'd', id: 7 }]
4.数组分割
function Chunk(arr = [], size = 1) {
return arr.length ? arr.reduce((t, v) => (t[t.length - 1].length === size ? t.push([v]) : t[t.length - 1].push(v), t), [[]]) : [];
}
const arr = [1, 2, 3, 4, 5];
console.log(Chunk(arr, 2)) // [[1, 2], [3, 4], [5]]
5.求数组最大值或最小值
function Max(arr = []) {
return arr.reduce((t, v) => t > v ? t : v);
}
function Min(arr = []) {
return arr.reduce((t, v) => t < v ? t : v);
}
const arr = [1,4,5,76,47,88,545,54,5654];
console.log(Max(arr)); // 5654
console.log(Min(arr)); // 1
6.展开多维数组
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数
let arr=[1,2,3,[4,5,6],8];
let result = arr.flat()
console.log(result);//[1,2,3,4,5,6,8]
let arr=[1,2,3,[4,5,[10],[12,[3]],6],8];
let result = arr.flat(Infinity)
console.log(result);// [1, 2, 3, 4, 5,10, 12, 3, 6, 8]
flatMap() 方法跟flat的区别是多一个回调函数,可以用来做一些事,但是只能处理深度为1层的数组
let arr=[[1,2],[3,4],[5,6]]
let arr2 = arr.flatMap(item=>{
item = item.filter(item=>item>=2)
return item
})
console.log(arr2);//[ 2, 3, 4, 5, 6 ]