第一种:会影响原数组
function norepeat(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);//删除一个元素之后,原数组发生改变,后边的元素会往前进一步,但是j是正常累加
j--;//为了避免漏掉往前进的那个元素的比较,j--抵消j++,再让arr[i]和删除的索引位上值再比较一次
}
}
}
return arr;
}
第二种:会影响原数组
function norepeat(arr) {
//相同的元素放到一起
arr.sort();
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
arr.splice(i + 1, 1);
i--;
}
}
return arr;
}
第三种:不会影响原数组
重点去看的一种方法
function norepeat(arr) {
var newArr = []; //用来存放不重复的元素的
var obj = {}; //把arr中的元素当成对象的属性名来处理 如果值为undefinded证明是第一次出现,给这个属性赋一个不为undefined的值,并且放到newArr里
for (var i = 0; i < arr.length; i++) {
if (obj[arr[i]] === undefined) {
obj[arr[i]] = 1;
newArr.push(arr[i]);
}
}
return newArr;
}
第四种:不会影响原数组
function norepeat(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
//判断arr中的元素是否在新数组中存在
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
第五种:不会影响原数组
var arr = [11, 1, 1, 2, 2, 1, 3];
let set = new Set(arr);
console.log(set); //{11, 1, 2, 3}
arr = [...set]; //利用rest将伪数组转化为真正的数组
console.log(arr); // [11,1,2,3]