JavaScript 数组去重

来自百度前端学院IFE

要求:对数组进行去重操作,只考虑数组中元素为数字或字符串,返回一个去重后的数组

function uniqArray(arr) { 
    // your implement
}
// 使用示例
var a = [1, 3, 5, 7, 5, 3];
var b = uniqArray(a);
console.log(b); // [1, 3, 5, 7]

代码如下:

function uniqArray(arr){
    var result=[];
    var isRepeat;
    for (var i = 0; i < arr.length; i++) {
        isRepeat=false;
        for (var j = 0; j < result.length; j++) {
            if (arr[i]==result[j]) {
                isRepeat=true;
                break;
            }
        }
        if (!isRepeat) {
            result.push(arr[i]);
        }
    }
    return result;
}

总体思路是把数组元素逐个搬运到另一个数组,搬运的过程中检查这个元素是否有重复,如果有就直接丢掉。从嵌套循环就可以看出,这种方法效率极低。我们可以 用一个hashtable的结构记录已有的元素,这样就可以避免内层循环。恰好,在Javascript中实现hashtable是极为简单的,改进如下:

function uniqArray(arr){
    var result=[];
    var obj={};
    for (var i = 0; i < arr.length; i++) {
        if(!obj[arr[i]]){
            result.push(arr[i]);
            obj[arr[i]]=true;
        }
    }
    return result;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关...
    苏星河阅读 689评论 0 12
  • Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.j...
    韩子迟阅读 1,397评论 0 57
  • 偶然和同事谈到面试的Javascript问题,其中基本上都会有一道问题就是数组去重,随着对于语言深入的学习,这道基...
    IloveData阅读 526评论 0 0
  • 总结一下利用JS解决去重问题的方法。总体思路: 构建一个新的空数组。 遍历数组,将不重复的元素Push到新数组中。...
    Zchao阅读 138评论 0 0
  • 曾经看到过这样一个女生,我一看她的眼睛就觉得整个世界都安静下来了!此生,我看到过无数只眼睛,只觉得她的眼睛最好看。...
    缘眸阅读 199评论 0 0