菜狗子的自我救赎01
- 01- 数组对象去重
- reduce
- 原生js 利用newObj 和 newArr
- 利用空数组 和 标识flag
- 多条件去重 假设 不知拿id 做对比 还有id2 id 3
- 利用双指针 splice
01- 数组对象去重
把下面数组对象去重
let arr = [
{ id: 1, name: '周瑜' },
{ id: 3, name: '王昭君' },
{ id: 2, name: '亚瑟' },
{ id: 1, name: '小乔' },
{ id: 2, name: '大桥' },
{ id: 3, name: '韩信' }
];
reduce
function unique(arr) {
let obj = {}
arr = arr.reduce((accumulator, current) => {
// obj[current.id] ? "" : obj[current.id] = accumulator.push(current)
// return accumulator
// 上面更优雅的写法 下面是自己写的缓冲带
if (!obj[current.id]) {
obj[current.id] = accumulator.push(current) // 这里arr.push返回数组的长度
}
return accumulator
}, [])
return arr
}
原生js 利用newObj 和 newArr
function unique2(arr) {
let newObj = {}
let newArr = []
for (let i = 0; i < arr.length; i++) {
// 自己写的垃圾代码 一会做对比 区别
// 44行这里错误是因为sb 只需要给newObj增加从未出现的id即可 所以我们需要做的是增加obj 的key 为 arr 的id
// if(newObj[arr[i]] && !newObj[arr[i]]['id'] ){
// newObj[arr[i]].id = 1
// newArr.push(arr[i])
// }
let temp = arr[i]
if (!newObj[temp['id']]) {
newObj[temp['id']] = newArr.push(arr[i])
}
}
return newArr
}
利用空数组 和 标识flag
function unique3(arr) {
let newArr = []
for (let i = 0; i < arr.length; i++) {
let flag = true
for (let j = 0; j < newArr.length; j++) {
if (arr[i].id === newArr[j].id) { //这里是newArray 的length 如果是arr 就会娶=取不到id
flag = false
break //细节break 节省计算量 提高性能
}
}
if (flag) {
newArr.push(arr[i])
}
}
return newArr
}
多条件去重 假设 不知拿id 做对比 还有id2 id 3
function unique4(arr, key, key2, key3) {
let newArr = []
for(let i=0; i < arr.length; i++){
let flag = true
for(let j = 0 ; j < newArr.length; j++){
if(arr[i][key]===newArr[j][key]
&& arr[i][key2]==newArr[j][key2] &&
arr[i][key3]==newArr[j][key3]
){
flag = false
}
}
if(flag){
newArr.push(arr[i])
}
}
return newArr
}
利用双指针 splice
function unique5 (arr,key) {
for(let i = 0 ; i < arr.length; i++){
for(let j = i + 1 ; j < arr.length; j++){ //这里j 是i+1
if(arr[i][key] == arr[j][key]){
arr.splice(j,1)
}
}
}
return arr
}
三室一厅
2023年6月9日 那一天,人类终于回想起了,曾经被他们支配的恐惧
计划10日 排序