原生js实现数组去重

博客主要围绕JS代码展开,涉及对元素type的处理,强调在代码中忽略元素type,若type不同则不进行删除操作。

代码

忽略元素type

function deleteMulti(arr) {
    let obj = {},
        res = [],
        current;
    for (let i = 0; i < arr.length; i++) {
        current = arr[i];
        if (!obj[current]) {
            obj[current] = current;
            res.push(current);
        }
    }
    return res;
}

如果type不同则不删除

function deleteMulti(arr) {
    let obj = {},
        res = [],
        type,
        current;
    for (let i = 0; i < arr.length; i++) {
        current = arr[i];
        type = typeof current;
        if (!obj[type]) {
            obj[current] = current;
            res.push(current);
        }
    }
    return res;
}
### 使用原生 JavaScript 实现数组的多种方法 在处理整型数组问题时,可以采用多种原生 JavaScript 方法。以下总结了几种常见的实现方式,涵盖性能和可读性等方面。 #### 1. 双循环 该方法通过嵌套遍历原始数组和结果数组来判断是否复,最终返回一个不包含复元素的新数组。这种方式的时间复杂度为 O(n²),适用于小规模数据集。 ```javascript function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!'); return; } let res = [arr[0]]; for (let i = 1; i < arr.length; i++) { let flag = true; for (let j = 0; j < res.length; j++) { if (arr[i] === res[j]) { flag = false; break; } } if (flag) { res.push(arr[i]); } } return res; } ``` 此方法较为基础,但效率较低,在处理大规模数组时会占用较多内存[^3]。 #### 2. 利用 `filter()` 和 `indexOf` 借助 `filter()` 方法与 `indexOf` 配合,可以简洁地筛选出唯一值: ```javascript const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((value, index, self) => self.indexOf(value) === index); console.log(uniqueArr); // [1, 2, 3, 4, 5] ``` 该方法利用了 `indexOf` 查找当前值首次出现的位置,并与当前索引对比以判断是否唯一[^4]。 #### 3. 使用对象辅助存储键值 通过结合对象结构存储已存在的值,可以在查找过程中提升效率: ```javascript function unique(arr) { const seen = {}; return arr.filter(item => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); } ``` 这种方法将时间复杂度降低至接近 O(n),适合中等规模的数据集。 #### 4. 使用 `reduce()` 构建唯一数组 通过 `reduce()` 方法逐个检查并添加非复元素到累积数组中: ```javascript function unique(arr) { return arr.reduce((acc, value) => { if (!acc.includes(value)) acc.push(value); return acc; }, []); } ``` 该方法具有良好的可读性,但 `includes` 操作本身是 O(n),整体复杂度仍较高。 #### 5. 结合对象和数组进行 使用对象记录已经存在的元素,避免复插入: ```javascript function unique(arr) { const seen = {}; const result = []; for (let i = 0; i < arr.length; i++) { if (!seen[arr[i]]) { seen[arr[i]] = true; result.push(arr[i]); } } return result; } ``` 这种写法在实际应用中较为常见,兼具性能与易读性。 #### 6. 利用 ES6 的 `Set` 进行(推荐) ES6 提供了 `Set` 数据结构,其特性保证了集合内元素的唯一性,因此可以直接用于数组: ```javascript function unique(arr) { return [...new Set(arr)]; } ``` 该方法简洁高效,且时间复杂度接近 O(n),是现代开发中最常用的手段之一[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值