美文网首页
查找重复元素

查找重复元素

作者: 这很重要吗 | 来源:发表于2017-05-16 14:44 被阅读0次

方案1##

//两层迭代解决
function duplicates(arr) {
    var newArr = [];
    for(var i=0;i<arr.length;i++){
        var count = 0;
        for(var j=0;j<arr.length;j++){
            if(arr[i]===arr[j]){
                count++;
            }
        }
        if(count>1 && newArr.indexOf(arr[i])===-1){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

方案二##


function duplicates(arr) {
     //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
     var a = [],b = [];
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){
         if(!b[arr[i]]){
             b[arr[i]] = 1;
             continue;
         }
         b[arr[i]]++;
     }
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
 }

方案三##

//使用indexOf ,判断第一次出现的位置和最后一次出现的位置是否相等
function duplicates(arr) {
 var result = [];
    arr.forEach(function(elem){
       if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
           result.push(elem);
       } 
    });
    return result;
}

Array.filter()用于把Array的某些元素过滤掉,然后返回剩下的元素。和map类似,Array的 filter也接收一个函数。但是和map不同是, filter把传入的函数依次作用于每个元素,然后根据返回值是 true还是 fals决定保留还是丢弃该元素。

利用 filter ,可以巧妙地去除Array的重复元素:

var r,
    arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];

r = arr.filter(function (element, index, self) {
    return self.indexOf(element) === index;
});

console.log(r.toString());

去除重复元素依靠的是 indexOf 总是返回第一个元素的位置,后续的重复元素位置与 indexOf 返回的位置不相等,因此被 filter 滤掉了。

Array.prototype.map()##

map 方法中的 callback 函数只需要接受一个参数,就是正在被遍历的数组元素本身。但这并不意味着 map 只给 callback 传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。

// 下面的语句返回什么呢:
["1", "2", "3"].map(parseInt);
// 你可能觉的会是[1, 2, 3]
// 但实际的结果是 [1, NaN, NaN]

// 通常使用parseInt时,只需要传递一个参数.
// 但实际上,parseInt可以有两个参数.第二个参数是进制数.
// 可以通过语句"alert(parseInt.length)===2"来验证.
// map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 
// 元素索引, 原数组本身.
// 第三个参数parseInt会忽视, 但第二个参数不会,也就是说,
// parseInt把传过来的索引值当成进制数来使用.从而返回了NaN.

/*
//应该使用如下的用户函数returnInt

function returnInt(element){
  return parseInt(element,10);
}

["1", "2", "3"].map(returnInt);
// 返回[1,2,3]
*/
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
/* roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9] */

相关文章

  • 查找重复元素

    方案1## 方案二## 方案三## Array.filter()用于把Array的某些元素过滤掉,然后返回剩下的元...

  • js数组去重查重

    数组去重 查找重复元素

  • C++STL常用算法

    查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向...

  • 数据结构和算法面试题整理

    #数组 - [查找数组中第二小的元素] - [查找第一个没有重复的数组元素] - [合并 2 个排序好的数组] -...

  • 大厂敲门砖——算法!手撸3道高频算法题,检测真水平!

    3道高频算法题 手撸算法1:查找数组中重复元素和重复元素的个数 手撸算法2:写个二分查找demo吧 手撸算法3:把...

  • 数据结构和算法之——二分查找下

    最简单的二分查找情况下,我们假设数组中没有重复元素,因此很容易实现。如果数组中存在重复元素,二分查找就没有想象中那...

  • 可查找重复元素的二分查找算法

    可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找。假设...

  • Set

    Set Set 与数组类似, Set 集合中的元素不重复。 查找元素: 在数组中使用 indexOf() 或 in...

  • Java二分法查找数组元素下标

    二分法查找是建立在已经排序的基础之上查询元素有重复则取重复数据最大下标

  • 2020 算法列表查找

    列表查找 在列表中查找指定元素。 输入为列表和要查找的元素 输出元素下标或未查找到元素 顺序查找 从列表第一个元素...

网友评论

      本文标题:查找重复元素

      本文链接:https://www.haomeiwen.com/subject/msllxxtx.html