一、【两个数组取并集】
function union(a, b, k) {
return a.concat(b.filter(i => (k ? !a.map(i => i[k]).includes(i[k]) : !a.includes(i))))
}
let a = [1, 2, 3, 4, 5]
let b = [1,6]
union(a, b) //[1, 2, 3, 4, 5, 6]
let a1 = [{id:1,name:'zhangsan'},{id:2,name:'lisi'}]
let b1 = [{id:2,name:'wangwu'},{id:3,name:'zhaoliu'}]
union(a1,b1,'id'); //[{id: 1, name: "zhangsan"},{id: 2, name: "lisi"},{id: 3, name: "zhaoliu"}]
二、【两个数组取交集】
function interp(a, b, k) {
return a.filter(t => (k ? b.map(i => i[k]).includes(t[k]) : b.includes(t)))
}
let c = [1,2,3,4,5];
let d = [1,2];
interp(c,d); //[1,2]
let c1 = [{id:1,name:'zhangsan'},{id:2,name:'lisi'}];
let d1 = [{id:2,name:'wangwu'},{id:3,name:'liuliu'}];
interp(c1,d1,'id'); //[{id:2,name:'lisi'}]
interp(d1,c1,'id'); //[{id:2,name:'wangwu'}]
三、【两个数组取差集】
function except(a, b, k) {
return [...a, ...b].filter(i => ![a, b].every(t => (k ? t.map(i => i[k]).includes(i[k]) : t.includes(i))))
}
let m = [1,2,3]
let n = [1,2]
except(m,n) //[3]
let m1 = [{id:1,name:'zhangsan'},{id:2,name:'lisi'}]
let n1 = [{id:2,name:'liuliu'},{id:3,name:'wangwu'}]
except(m1,n1,'id') //[{id: 1,name: "zhangsan"},{id: 3, name: "wangwu"}]
四、【数组求和】
function sum(a, k) {
return a.reduce((p, c) => p + (k ? c[k] || 0 : c), 0)
}
let arrs = [1,2,3]
sum(arrs); //6
let arrs1 = [{name:'zhangsan',age:10},{name:'lisi',age:16}];
sum(arrs1,'age'); //26
五、【数组分组】
function group(arr, num) {
return [...Array(Math.ceil(arr.length / num)).keys()].reduce((p, _, i) => (p.push(arr.slice(i * num, (i + 1) * num)), p), [])
}
let x = [1,2,3,4,5,6,7,8,9,10]
group(x,3); //[[1, 2, 3],[4, 5, 6],[7, 8, 9]]
group(x,4); //[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10]]
六、【数组平均数】
function mean(a, f) {
return (f ? a.map(typeof f === 'function' ? f : v => v[f]) : a).reduce((acc, val) => acc + val * 1, 0) / a.length
}
console.log(mean([2,4,6,8,10])); // 6
七、【数组生成】
function range(min, max) {
return Array.from({ length: max - min + 1 }, (_, i) => i + min)
}
range(-1,9); //[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]