获取数组中重复的元素

本文介绍两种数组去重方法:一种适用于基本类型元素的数组,通过哈希表实现快速查找重复元素;另一种针对对象数组,比较对象属性及值,去除属性完全相同的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种,判断包含基本类型的数组中的重复元素

/**
 * (这里只是判断基本类型的元素)
 * @param  Array
 * @return Array
 */
export const getRepeatElement = (array) => {
  let result = []
  let hash = {}
  array.forEach((item) => {
    if (item) {
      if (!hash[item]) {
        hash[item] = true
      } else {
        result.push(item)
      }
    }
  })

  result = result.filter((item, index, arr) => arr.indexOf(item) === index)

  return result
}

第二种,判断包含对象的数组中的重复元素

/* 去掉对象数组中属性和属性值一样的对象,返回过滤后的数组 */
const getNoRepeatObject = (array) => {
  if (array.length < 2) {
    return array
  }
  let differentObject = []  //放不重复的对象
  let sameObject = [] //放重复对象
  array.forEach(obj => {
    let sameArray = differentObject.filter(tempObj => {
      let isSame = true
      if(Object.keys(tempObj).length === Object.keys(obj).length) {
        for (const key in tempObj) {
          if (!obj.hasOwnProperty(key) || tempObj[key] !== obj[key]) {
            isSame = false
          }
        }
      } else {
        isSame = false
      }
      if (isSame) {
        return tempObj
      }
    })
    if (!sameArray.length) {
      differentObject.push(obj)
    } else {
      sameObject.concat(sameArray)  //将重复的对象放到sameObject数组中,如果需要,也可以返回
    }
  })
  if (differentObject.length === 1) {
    differentObject = []
  }

  return differentObject
}

 

转载于:https://www.cnblogs.com/yyh1/p/9822257.html

### 数组去重的多种实现方式 在不同的编程语言中,去除数组中的重复元素可以通过多种方法实现。以下是几种常见编程语言的具体实现。 #### C 语言 在 C 语言中,通过双层循环逐一比较数组中的元素,并将重复元素移除。这种方法的时间复杂度较高,但在某些场景下仍然适用[^5]。 ```c #include<stdio.h> #define N 12 int main(){ int a[N] = { 1, 1, 2, 3, 3, 4, 6, 4, 8, 6, 9, 8}; int i = 0, j = 0, n = N; printf("==========去重之前=========\n"); for (i = 0; i < n; i++){ printf("%d ", a[i]); } for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; ) { if (a[i] == a[j]) { for (int k = j; k < n - 1; k++) { a[k] = a[k + 1]; } --n; } else { ++j; } } } printf("\n==========去重之后=========\n"); for (i = 0; i < n; i++) { printf("%d ", a[i]); } return 0; } ``` 此代码展示了如何手动遍历数组并删除重复项的过程。 --- #### Java 实现 Java 提供了 `HashSet` 数据结构,能够自动处理重复数据。因此,在 Java 中可以更高效地完成数组去重操作[^2]。 ```java import java.util.HashSet; public class RemoveDuplicates { public static void main(String[] args) { Integer[] numbers = {1, 2, 3, 3, 4, 4, 5}; HashSet<Integer> uniqueNumbers = new HashSet<>(); for (Integer number : numbers) { uniqueNumbers.add(number); } // 将HashSet中的元素转换回数组 Integer[] newArray = new Integer[uniqueNumbers.size()]; int index = 0; for (Integer num : uniqueNumbers) { newArray[index++] = num; } System.out.println(java.util.Arrays.toString(newArray)); } } ``` 利用集合类的特点简化了逻辑判断过程。 --- #### JavaScript 方法 JavaScript 支持现代语法特性,比如 `Set` 对象可以直接用于过滤掉重复值[^3]。 ```javascript function removeDuplicates(array) { return Array.from(new Set(array)); } // 示例用法 const originalArray = [1, 2, 3, 3, 4, 4, 5]; const uniqueArray = removeDuplicates(originalArray); console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5] ``` 这种方式简洁明了,适合快速开发需求。 --- #### PHP 解决方案 PHP 同样具备内置函数支持这一功能,例如 `array_unique()` 函数可直接调用来获取重复版本的数据集[^4]。 ```php <?php $array = array(1, 2, 3, 3, 4, 4, 5); $unique_array = array_values(array_unique($array)); print_r($unique_array); ?> ``` 以上脚本演示了一个简单的例子说明如何去掉列表里的冗余项目。 --- ### 总结 每种语言都有其特定的最佳实践来解决此类问题。选择哪种取决于具体的应用环境和个人偏好等因素考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值