1、数组对象的合集,并集,差集
let a = [{id: 1}, {id: 2}, {id: 3}, {id: 4}]
let b = [{id: 1}, {id: 22}, {id: 33}, {id: 4}]
// b数组相对于a数组的交集
let intersect = [...b].filter(item=> [...a].some(it=> it.id === item.id))
console.log(intersect) // [{id: 1},{id: 4}]
// a数组相对于b数组的差集
let minus = [...a].filter(item=> [...b].every(it=> it.id !== item.id))
console.log(minus) // [{id: 2},{id: 3}]
// 合并去重-并集
const map = new Map()
let arr = [...a, ...b]
let union = arr.filter((item, index) => !map.has(item.id) && map.set(item.id, index))
console.log(union) // [{id: 1},{id: 2},{id: 3},{id: 4},{id: 22}, {id: 33}]
console.log(map) // map {1 => 0}, {2 => 1}, {3 => 2}, {4 => 3}, {22 => 5}, {33 => 6}
console.log(map.get(4)) // 3
2、Set的操作方法
let mySet = new Set([1, 2, 1, 3, 4, 5, 5, 6])
console.log([...mySet]) // [1,2,3,4,5,6]
// add(value):添加某个值,返回Set结构本身。
console.log([...mySet.add(8)]) // [1,2,3,4,5,6,8]
// delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
console.log(mySet.delete(1)) // true
console.log([...mySet]) // [2,3,4,5,6,8]
// has(value):返回一个布尔值,表示该值是否为Set的成员。
console.log(mySet.has(8)) // true
// clear():清除所有成员,没有返回值
console.log(mySet.clear()) // undefined
console.log([...mySet]) // []
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。所以我们可以用Set特性来进行数组去重(注:数组对象不允许)
let a = new Set([1,2,3])
let b = new Set([2,3,5])
// 并集
let union = new Set([...a, ...b])
console.log([...union]) // [1,2.3.5]
// 交集
let intersect = new Set([...a].filter(it => b.has(it)))
console.log([...intersect]) // [2,3]
// 差集
let difference = new Set([...a].filter(it => !b.has(it)))
console.log([...difference]) // [1]
知识点:
1、[...a] 就是把set转换成array。
2、filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
3、Array.filter(it => 条件) 遍历当前数组,当遍历到的某个元素时。返回值为false的元素或被移除
3、Map数据结构操作方法
Map 数据结构,类似于对象,键值对的集合, 所有的数据都是唯一的,不会重复,每条数据都需要放在一个数组中,它本身就是一个构造函数
var map = new Map([['name', '哈哈'], ['age', 20]])
// size 数据的长度
console.log(map.size) // 2
// set() 添加一个数据
map.set('sex', '女')
// delete() 删除一条数据
map.delete('name')
// get() 获取一条数据
console.log(map.get('sex')) // 女
// has() 查找某条数据,返回一个布尔值
console.log(map.has(name)) // false
// clear() 删除所有数据
map.clear()