方法一:循环判断当前元素与其后面所有元素对比是否相等,如果相等删除;(执行速度慢)

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function removeDuplicatedItem(arr) {
for(var i = 0; i < arr.length-1; i++){
for(var j = i+1; j < arr.length; j++){
if(arr[i]==arr[j]){
arr.splice(j,1);//console.log(arr[j]);
j--;
}
}
}
return arr;
} arr2 = removeDuplicatedItem(arr);
console.log(arr);
console.log(arr2);

方法二:借助新数组 判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

function unique4(arr){
var res = [];
for(var i=0; i<arr.length; i++){
if(res.indexOf(arr[i]) == -1){
res.push(arr[i]);
}
}
return res;
} console.log(unique4([1,1,2,3,5,3,1,5,6,7,4]));

方法三:利用对象属性存在的特性,如果没有该属性则存入新数组。

function unique3(arr){
var res = [];
var obj = {};
for(var i=0; i<arr.length; i++){
if( !obj[arr[i]] ){
obj[arr[i]] = 1;
res.push(arr[i]);
}
}
return res;
}
console.log(unique3([1,1,2,3,5,3,1,5,6,7,4]));

方法四:先将原数组排序,在与相邻的进行比较(新数组最后一个元素),如果不同则存入新数组。

function unique2(arr){
var arr2 = arr.sort();
var res = [arr2[0]];
for(var i=1; i<arr2.length; i++){
if(arr2[i] !== res[res.length-1]){
res.push(arr2[i]);
}
}
return res;
} console.log(unique2([1,1,2,3,5,3,1,5,6,7,4]));

方法五:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中

function unique(arr){
var res = [arr[0]];
for(var i=1; i<arr.length; i++){
var repeat = false;
for(var j=0; j<res.length; j++){
if(arr[i] === res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(arr[i]);
}
}
return res;
} console.log(unique([1,1,2,3,5,3,1,5,6,7,4]));

方法六:利用数组原型对象上的includes方法。

function unique5(arr){
var res = []; for(var i=0; i<arr.length; i++){
if( !res.includes(arr[i]) ){ // 如果res新数组包含当前循环item
res.push(arr[i]);
}
}
return res;
} console.log(unique5([1,1,2,3,5,3,1,5,6,7,4]));

方法七:利用数组原型对象上的 lastIndexOf 方法。

function unique9(arr){
var res = [];
for(var i=0; i<arr.length; i++){
res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
}
return res;
} console.log(unique9([1,1,2,3,5,3,1,5,6,7,4]));

方法八:利用 ES6的set 方法。

function unique10(arr){
//Set数据结构,它类似于数组,其成员的值都是唯一的
return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
}
console.log(unique10([1,1,2,3,5,3,1,5,6,7,4]));

方法九:借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

var ar = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function rep2(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
i--;//数组下标回退
}
}
return arr;
}
var a1 = rep2(ar);
console.log(ar);
console.log(a1);

方法十:利用数组中的filter方法

var arr = ['apple','strawberry','banana','pear','apple','orange','orange','strawberry'];
var r = arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
console.log(r);

方法十一:双重循环,判断当前元素是否与后边元素有重复,如果没有重复,push进新数组,有重复则将重复元素中最后一个元素push进新数组

var arr = [12, 2, 44, 3, 2, 32, 33, -2, 45, 33, 32, 3, 12];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
var repArr = [];//接收重复数据后面的下标
//内层循环找出有重复数据的下标
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
repArr.push(j);//找出后面重复数据的下标
}
}
//console.log(repArr);
if (repArr.length == 0) {//若重复数组没有值说明其不是重复数据
newArr.push(arr[i]);
}
}
console.log(newArr);//[ 44, 2, -2, 45, 33, 32, 3, 12 ]

最新文章

  1. 完全删除TFS2013上的项目
  2. c++程序设计之编程思想
  3. nyist 626 intersection set
  4. BZOJ 1898 Swamp 沼泽鳄鱼(矩阵)
  5. HDU3709 Balanced Number (数位dp)
  6. 【转】Android fill_parent和wrap_content分析
  7. python 之 计数器(counter)
  8. Linux的打印rpm包的详细信息的shell脚本
  9. 安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御
  10. JMeter中返回Json数据的处理方法(转)
  11. 【原创】大数据基础之Logstash(2)应用之mysql-kafka
  12. Eclipse块选择快捷键
  13. Caused by: java.lang.ClassNotFoundException: Cannot find class解决办法
  14. oracle-网络
  15. Seaborn图形可视化库
  16. Linux crontab命令详解与实例
  17. customs event
  18. AngularJS中页面传参方法
  19. GlobalAlloc()和malloc()、HeapAlloc()
  20. oracle删除一个表内的重复数据,

热门文章

  1. In Java, how can I test if an Array contains a certain value?
  2. 15-cmake语法-math
  3. 引入jquery时,页面一直加载
  4. 异常DBG_PRINTEXCEPTION_C(0x40010006)和DBG_PRINTEXCEPTION_WIDE_C(0x4001000A)
  5. pcm音频的格式类型
  6. async和await对promise异步方案的改进,以及使用注意事项
  7. xcode: {} 花括号缩进一个空格
  8. [技术博客]微信小程序审核的注意事项及企业版小程序的申请流程
  9. React组件介绍与使用(父传子、子传父、兄弟传)
  10. Python【每日一问】25