Fork me on GitHub

数组的去重和反转

数组的去重六种方法总结

1 生成随机的彩票数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 彩票数的返回是从1到32
var numArr = [];
for(var i=0;i<6;i++)
{
var num = Math.floor(Math.random()*31)+1;
// 在数组添加这个元素之前 应该做一次去重判断
console.log(num);
quchong(numArr,num);

}
console.log(numArr.sort(function (a,b) {
return a-b;
}));
function quchong(arr,num) {
for(var j=0;j<=arr.length;j++)
{
console.log('liuyifei');
if(num === arr[j])
{
return false;
}
arr.push(num);
return false;
// 出现死循环的原因: 当你添加一个元素的时候 数组的长度就会加1
// 这样num永远是第一次的num 这个内层的for循环也永远无法出去 故成为死讯话
}
}

2 在数组原型上添加方法 通过标志位来判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array.prototype.unique = function(){
var len = this.length,
newArr = [],
flag = 1;
for(var i = 0; i < len; i++, flag = 1){
for(var j = 0; j < i; j++){
if(this[i] == this[j]){
flag = 0; //找到相同的数字后,不执行添加数据
}
}
flag ? newArr.push(this[i]) : '';
}
return newArr;
}

3 使用es5的方法 即indexof 来进行判断 原理是 当数组不包含这个元素的时候 会返回-1

1
2
3
4
5
6
7
8
9
10
11
12
var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
Array.prototype.unique2 = function()
{
var n = []; //一个新的临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(this[i]) == -1) n.push(this[i]);
}
return n;
}

4 使用es6的方法 includes 原理是:当数组不包含这个元素的时候 返回false

1
2
3
4
5
6
7
8
9
10
11
12
var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
Array.prototype.unique = function () {
var newArr = [];
for(var i=0;i<this.length;i++)
{
if(newArr.includes(this[i])===false)
{
newArr.push(arr[i])
}
}
return newArr;
}

5 使用es6的方法 set 原理是:基本用法
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。

1
2
3
4
5
6
7
8
const s = new Set();

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

for (let i of s) {
console.log(i);
}
// 2 3 5 4

上面代码通过add方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。
6 使用对象 进行数组的去重,原理是 对象的属性名 具有唯一性

1
2
3
4
5
6
7
8
9
10
var obj = {};
var newArr = [];
for(var i=0;i<arr.length;i++)
{
obj[arr[i]] = i;
}
for(var k in obj)
{
newArr.push(k);
}

数组的反转 以及 交换两个变量的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Array.prototype.re = function () {
for (var i = 0; i < this.length / 2; i++) {

// 交换两个变量的值
var temp = this[i];;
this[i] = this[this.length - i - 1];
this[this.length - i - 1] = temp;

}
console.log(this);
return this;
}
var newArr = arr.re();
console.log(newArr);
var a =10;
var b = 20;
a=a^b;
b=a^b;
a=a^b;
a=a+b;
b=a-b;
a=a-b;
console.log(a);
console.log(b);

使用一个for循环完成数组的排序

1
2
3
4
5
6
7
8
var arr = [1,2,5,6,3,9,4,7,8,10];
var newArr = [];
while (arr.length!=0){
var item = Math.min.apply(arr,arr);
arr.splice(arr.indexOf(item),1);
newArr.push(item);
}
console.log(newArr);
-------------本文结束感谢您的阅读-------------