javascript数组查重

来源:互联网 发布:熊猫智能采集软件 编辑:程序博客网 时间:2024/05/01 18:00

题目描述

找出数组 arr 中重复出现过的元素
示例1
输入: [1, 2, 4, 4, 3, 3, 1, 5, 3];
输出: [1, 3, 4];

方法一:先排序后查重:

function duplicates(arr) {  var newArr = arr.sort();  var result = [];  for (var i = 0; i < newArr.length; i++){      if (newArr[i] == newArr[i+1] && newArr[i]!= newArr[i-1]){          result.push(newArr[i]);      }  }    return result;}var a = [1,1,2,3,5,3];var b = duplicates(a);console.log(b);// 1,3


对象引索法:

链接:https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b来源:牛客网/* 时间复杂度为O(n)算法。思路:遍历数组,将数组的元素和数组出现的次数分别作为对象属性和值。遍历对象,取出次数大于1的即可。 */function duplicates(arr) {    var obj = {};    var repeatList = [];    //遍历数组,将数组的值作为obj的索引,出现次数为值    arr.forEach(function(item){        if(obj[item]){            obj[item] +=1;        }else{            obj[item] = 1;        }    });    //获取对象自身属性    var propertyNames = Object.getOwnPropertyNames(obj);    //遍历对象,将重复出现的元素取出    propertyNames.forEach(function(item){        if(obj[item] > 1){            repeatList.push(parseInt(item));        }    });    return repeatList; }


hash表的算法:

function duplicates(arr) {    var hash = {},ret ={};    for (var i =0; i < arr.length; i++) {        hash[arr[i]] ? ret[arr[i]] = 1 : hash[arr[i]] = 1    }    return Object.keys(ret)}
原创粉丝点击