//method_1:for/for in/+sort 先进行排序,然后判断排序之后的前一个数据是否等于后一个数据,如果是且结果数组没有这个元素
//for 运行时间:1596ms 占用内存:77772k
function duplicates(arr) {
let resArr = [];
arr.sort();
for(let i=0;i<arr.length;i++){
if(arr[i]==arr[i-1] && resArr.indexOf(arr[i])==-1){
resArr.push(arr[i]);
}
}
return resArr;
}
//for in 运行时间:1132ms占用内存:77868k
function duplicates(arr) {
let resArr = [];
arr.sort();
for(i in arr){
if(arr[i]==arr[i-1] && resArr.indexOf(arr[i])==-1){
resArr.push(arr[i]);
}
}
return resArr;
}
// method_2:forEach 利用索引判断是否重复(使用了两次)
function duplicates(arr) {
var resArr=[];
arr.forEach(v => {
//判断原数组是否有重复数据
//判断结果数组是否已经具有该数据
if(arr.indexOf(v) !=arr.lastIndexOf(v) && resArr.indexOf(v) == -1){
resArr.push(v);
}
});
return resArr;
}
//method_3:reduce 先判断数组中元素出现的次数,如果大于1并且结果数组之前无此元素,则将这个元素放到结果数组中
// 运行时间:1129ms 占用内存:77776k
function duplicates(arr) {
let b = [];
let resArr = [];
for (let i= 0; i<arr.length; i++){
b[i] = arr.reduce( (init,curr)=> {
//如果当前置等于item,该函数值加一
return curr === arr[i] ? init+1:init;
},0)
if (b[i] > 1 && resArr.indexOf(arr[i]) === -1){
resArr.push(arr[i]);
}
}
return resArr;
}
console