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;
}//先排序,如果后一个与前一个相等且未保存,则保存。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。