JS 数组或数组对象去重的9种方法

JS 数组或数组对象去重的9种方法文章介绍了九种在 JavaScript 中实现数组去重的方法 包括基础的遍历比较 排序后比较 利用对象属性 indexOf includes 等方法 以及使用数组的 filter 和 forEach 方法 适应于不同类型的数组 包括对象数组 进行去重操作

大家好,欢迎来到IT知识分享网。

// 数组去重

const arr = [“1”, “1”, “2”, “3”, “5”, “3”, “1”, “5”, “4”]

console.log(this.deduplicate(arr)) // [‘1’, ‘2’, ‘3’, ‘5’, ‘4’]

// 数组对象去重

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 < arr.length; i++) { let repeat = false for (let j = 0; j < newArr.length; j++) { if (t && arr[i][t] === newArr[j][t]) { repeat = true break } } if (!repeat) newArr.push(arr[i]) } } // 无指定字段 else { for (let i = 1; i < arr.length; i++) { let repeat = false for (let j = 0; j < newArr.length; j++) { if (arr[i] === newArr[j]) { repeat = true break } } if (!repeat) newArr.push(arr[i]) } } return newArr }

方法二

/ 数组去重 * 思路:先将原数组进行排序,再与相邻的角标进行对比,如果不同则存入新数组 * @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 < sortArr.length; i++) { if (sortArr[i][t] !== sortArr[i - 1][t]) newArr.push(sortArr[i]) } } // 无指定字段 else { for (let i = 1; i < sortArr.length; i++) { if (sortArr[i] !== sortArr[i - 1]) newArr.push(sortArr[i]) } } return newArr }

方法三

/ 数组去重 * 思路:利用对象属性存在的特性,如果没有该属性则存入新数组 * @param arr 需要去重的数组 * @param t 根据 t 字段(指定)进行去重 * @returns {*[]} 已去重后的数据 */ deduplicate(arr, t = "") { const obj = {}, newArr = [] // 有指定字段 if (t) { for (let i = 0; i < arr.length; i++) { if (!obj[arr[i][t]]) { obj[arr[i][t]] = 1 newArr.push(arr[i]) } } } // 无指定字段 else { for (let i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { obj[arr[i]] = 1 newArr.push(arr[i]) } } } return newArr }

方法四

/ 数组去重 * 思路:利用数组的 indexOf 下标属性来查询 * @param arr 需要去重的数组 * @param t 根据 t 字段(指定)进行去重 * @returns {*[]} 已去重后的数据 */ deduplicate(arr, t = "") { const newArr = [], assignList = [] // 有指定字段 if (t) { for (let i = 0; i < arr.length; i++) { if (assignList.indexOf(arr[i][t]) === -1) { assignList.push(arr[i][t]) newArr.push(arr[i]) } } } // 无指定字段 else { for (let i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) newArr.push(arr[i]) } } return newArr }

方法五

/ 数组去重 * 思路:利用数组原型对象上的 includes 方法 * @param arr 需要去重的数组 * @param t 根据 t 字段(指定)进行去重 * @returns {*[]} 已去重后的数据 */ deduplicate(arr, t = "") { const newArr = [], assignList = [] // 有指定字段 if (t) { for (let i = 0; i < arr.length; i++) { if (!assignList.includes(arr[i][t])) { assignList.push(arr[i][t]) newArr.push(arr[i]) } } } // 无指定字段 else { for (let i = 0; i < arr.length; i++) { if (!newArr.includes(arr[i])) newArr.push(arr[i]) } } return newArr }

方法六

/ 数组去重 * 思路:利用数组原型对象上的 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 < len; i++) { for (j = i + 1; j < len; j++) { if (arr[i][t] === arr[j][t]) { arr.splice(j, 1) len-- j-- } } } } // 无指定字段 else { for (i = 0; i < len; i++) { for (j = i + 1; j < len; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1) len-- j-- } } } } return arr }

方法九

/ 数组去重 * 思路:利用数组原型对象上的 lastIndexOf 方法 * @param arr 需要去重的数组 * @param t 根据 t 字段(指定)进行去重 * @returns {*[]} 已去重后的数据 */ deduplicate(arr, t = "") { const newArr = [], assignList = [] // 有指定字段 if (t) { for (let i = 0; i < arr.length; i++) { if (assignList.lastIndexOf(arr[i][t]) === -1) { assignList.push(arr[i][t]) newArr.push(arr[i]) } } } // 无指定字段 else { for (let i = 0; i < arr.length; i++) { newArr.lastIndexOf(arr[i]) !== -1 ? "" : newArr.push(arr[i]) } } return newArr }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110653.html

(0)
上一篇 2026-01-30 08:33
下一篇 2026-01-30 09:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信