共计 2396 个字符,预计需要花费 6 分钟才能阅读完成。
// 数组去重
const arr = [“1”, “1”, “2”, “3”, “5”, “3”, “1”, “5”, “4”]
console.log(this.deduplicate(arr)) // [‘1’, ‘2’, ‘3’, ‘5’, ‘4’]
// 数组对象去重
const arr = [
{id: 1, name: “ 数据 1 ”},
{id: 1, name: “ 数据 2 ”},
{id: 2, name: “ 数据 3 ”},
{id: 3, name: “ 数据 4 ”},
{id: 4, name: “ 数据 5 ”},
{id: 3, name: “ 数据 6 ”},
{id: 5, name: “ 数据 7 ”}
]console.log(this.deduplicate(arr, “id”)) // [{id: 1, name: “ 数据 2 ”}, {id: 2, name: “ 数据 3 ”}, {id: 3, name: “ 数据 4 ”}, {id: 4, name: “ 数据 5 ”}, {id: 5, name: “ 数据 7 ”}]
方法一
/** 数组去重
* 思路:定义一个新数组,存放原数组的第一个元素,然后将原数组和新数组的元素对比,若不同则存放在新数组中
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const newArr = [arr[0]]
// 有指定字段
if (t) {for (let i = 1; i
方法二
/** 数组去重
* 思路:先将原数组进行排序,再与相邻的角标进行对比,如果不同则存入新数组
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const sortArr = arr.sort(function (a, b) {if (t) return a[t] - b[t]
return a - b
}), // 升序排列
newArr = [sortArr[0]]
// 有指定字段
if (t) {for (let i = 1; i
方法三
/** 数组去重
* 思路:利用对象属性存在的特性,如果没有该属性则存入新数组
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const obj = {},
newArr = []
// 有指定字段
if (t) {for (let i = 0; i
方法四
/** 数组去重
* 思路:利用数组的 indexOf 下标属性来查询
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const newArr = [],
assignList = []
// 有指定字段
if (t) {for (let i = 0; i
方法五
/** 数组去重
* 思路:利用数组原型对象上的 includes 方法
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const newArr = [],
assignList = []
// 有指定字段
if (t) {for (let i = 0; i
方法六
/** 数组去重
* 思路:利用数组原型对象上的 filter 和 includes 方法
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {let newArr = []
// 有指定字段
if (t) {newArr = arr.filter(function (item) {return newArr.includes(item[t]) ? "" : newArr.push(item[t])
})
}
// 无指定字段
else {newArr = arr.filter(function (item) {return newArr.includes(item) ? "" : newArr.push(item)
})
}
return newArr
}
方法七
/** 数组去重
* 思路:利用数组原型对象上的 forEach 和 includes 方法
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const newArr = [],
assignList = []
// 有指定字段
if (t) {arr.forEach(item => {if (!assignList.includes(item[t])) {assignList.push(item[t])
newArr.push(item)
}
})
}
// 无指定字段
else {arr.forEach(item => {return newArr.includes(item) ? "" : newArr.push(item)
})
}
return newArr
}
方法八
/** 数组去重
* 思路:利用数组原型对象上的 splice 方法
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {
let i,
j,
len = arr.length
// 有指定字段
if (t) {for (i = 0; i
方法九
/** 数组去重
* 思路:利用数组原型对象上的 lastIndexOf 方法
* @param arr 需要去重的数组
* @param t 根据 t 字段 (指定) 进行去重
* @returns {*[]} 已去重后的数据
*/
deduplicate(arr, t = "") {const newArr = [],
assignList = []
// 有指定字段
if (t) {for (let i = 0; i
原文地址: JS 数组或数组对象去重的 9 种方法
正文完