数组去重:
普通字符串/数字数组去重:
1. 利用Set的特性 => new Set(arr)
2. for遍历, indexOf判断是否存在
3. 利用对象去重, 因为对象的key有唯一性
4. Map也可以用于去重
数组合并:
可以使用克隆(克隆, 深克隆的那些方法)
对象数组去重:
1. Set(遍历存下唯一的key的set数据)+filter
// 对象数组去重(Set+filter)
function uniqueArr(arr = [], key) {
const keyVals = new Set();
return arr.filter(obj => {
val = obj[key];
if(keyVals.has(val)) return false
keyVals.add(val)
return true
})
}
2. Map+filter(大体思路同上)
function uniqueArr(arr = [], key) {
const keyVals = new Map();
return arr.filter(obj => {
val = obj[key];
if(keyVals.has(val)) return false
keyVals.set(val) // keyVals.set第二个参数若不传, 会默认为第二个参数是undefined, 但是还是可以通过has方法判断有没有存入key数据的
return true
})
}
3. for循环, find或者findIndex判断是否存在, 然后不存在就push
// 对象数组合并+去重
function mergeArray(arr1, arr2) {
// 克隆
var arr= arr1.slice(0)
var v
for(let i in arr2) {
v = arr2[i]
if(~arr.findIndex(ee=>ee.id === v.id)) {
continue
}
arr.push(v)
}
return arr
}
const arr1 = [{id: 1}, {id: 2}, {id:3}]
const arr2 = [{id: 3}, {id: 4}, {id: 3}, {id:5}]
// 合并+去重
console.log(mergeArray(arr1, arr2))
// 单纯给arr2数组去重--mergeArray的第一个参数传[], 第二个传需要去重的数组
console.log(mergeArray([], arr2))