文章目录
数组去重(数字)
// 双重循环遍历(额外存储)
function unique1 (array) {
const arr = []
for (let i = 0; i < array.length; i++) {
if (!arr.includes(array[i])) {
arr.push(array[i])
}
}
return arr
}
// 双重循环遍历(在原数组上操作)
function unique2 (array) {
for (let i = 0; i < array.length; i++) {
for (let j = i+1; j < array.length; j++) {
if (array[i] === array[j]) {
array.splice(j, 1)
}
// j后面的数字都往前挪一位,array[i]下一轮要比较的还是array[j],而不能递增
j--
}
}
}
// 基于对象去重
function unique3 (array) {
const arr = []
const obj = {}
array.forEach((item) => {
if (!obj.hasOwnProperty(item)) {
obj[item] = true
arr.push(item)
}
})
return arr
}
// 基于Set去重
function unique4 (array) {
return [...new Set(array)]
}
// 排序后去重
function unique5(array) {
array.sort((a, b) => a - b);
let pre = 0;
const result = [];
for (let i = 0; i < array.length; i++) {
if (!i || array[i] != array[pre]) {
result.push(array[i]);
}
pre = i;
}
return result;
}
数组去重(对象)
var resources = [
{ name: "张三", age: "18" },
{ name: "张三", age: "19" },
{ name: "张三", age: "20" },
{ name: "李四", age: "19" },
{ name: "王五", age: "20" },
{ name: "赵六", age: "21" }
]
function objectUnique (array) {
const obj = {};
array = array.reduce((prev, cur) => {
if (!obj[cur.name]) {
obj[cur.name] = true
prev.push(cur)
}
return prev
}, [])
return array
}
console.log(objectUnique(resources));
扁平数组
// for循环版本
function flat(array) {
let result = [];
for (let i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
// 是数组
result = result.concat(flat(array[i]))
} else {
// 不是数组
result.push(array[i])
}
}
return result
}
// 指定深度扁平数组
function flattenByDeep(array, deep) {
if (deep <= 0) return array
let result = []
for (let i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
// 是数组
result = result.concat(flattenByDeep(array[i], --deep))
} else {
// 不是数组
result.push(array[i])
}
}
return result
}
数组最值
// 1. reduce
array.reduce((prev,cur)=>Math.max(prev,cur))
// 2. Math.max
// Math.max参数原本是一组数字,只需要让他可以接收数组即可。
const array = [3,2,1,4,5];
Math.max.apply(null,array);
Math.max(...array);
参考资料
- 数组去重、扁平、最值