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

9,927次阅读
没有评论

共计 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 种方法

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-30发表,共计2396字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)