乐趣区

找出数组-arr-中重复出现过的元素

function duplicates(arr) {var newarr = [];
    for(var j = 0;j < arr.length;j++){for(var i = j+1;i < arr.length;i++){if(arr[j] == arr[i]){newarr.push(arr[i]);
                
            }
        }
    } 
    //return [...new Set(newarr)];
    return Array.from(new Set(newarr));
}

输入:
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]

方法二:

function duplicates(arr) {
    // 得到重复出现过的元素组成的数组   
    var newarr = [];
    for(var j = 0;j < arr.length;j++){if(arr.indexOf(arr[j]) != j){newarr.push(arr[j]);
        }
    } 
    // 数组去重
    var temp = []; // 一个新的临时数组
    for(var i = 0; i < newarr.length; i++){if(temp.indexOf(newarr[i]) == -1){temp.push(newarr[i]);
        }
    }
    return temp;
}

方法三

https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b
如果元素过大的话,方法三不好,因为会遍历很多次。而且如果原数组中的每一项不全是数值,得到关联数组,那么对数组 b 的遍历要做修改
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;
 }

方法四:

 方法三改进后
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;  
}

方法五:

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;
}

方法六

function duplicates(arr) {var a=arr.sort(),b=[];
    for(var i in a){if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }
    return b;
}// 先排序,如果后一个与前一个相等且未保存,则保存。
退出移动版