关于array的计算,全在这里

太多面试题里都需要我们队数组进行操作,比如排序,去重,深拷贝,浅拷贝,截取,插入,删除,这些都是很基础的题目,所以我就把所有数组的操作集中起来,进行不定期的更新,希望能够帮到正在找工作的你,还有我啦。
本人现在还在找工作当中,如果有人看到比较满意的话,请联系我。线上简历

数组排序:

入门级数组排序
1
2
3
var arr = new Array(1,6,7,8)
arr.sort()
console.log(arr.join())

这种排序方式只是按照数字的第0位的大小进行排序,第0位相同在判断第1位,不符合文中要求的数组排序。或者说,只适合个位数的排序。

不过这个数组可以解决前端面试题里有一个问题,问题是这样的,如何将数组中的数字组合起来,成为一个最大的整数,比如(1,233,5,77,9),组合为最大的整数为:97752331
可以使用到sort()方法,具体实现:

1
2
var arr = new Array(1,6,7,8)
parseInt(arr.sort().reverse().join('')) //8761

初级数组排序
1
2
3
var arr = new Array(11,62,73,81)
arr.sort(function(a,b){return b-a})
console.log(arr.join()) //81,73,62,11

比较初级的数组排序算法,也是比较常见的排序算法,如何提升这个代码的逼格呢?

ES6下的数组排序
1
2
3
var arr = new Array(11,62,73,81)
arr.sort( (a,b) => a-b) //箭头函数,逼格满满
console.log(arr.join()) //81,73,62,11

数组去重

入门级数组去重

思路:1. 建一个新的数组 2. for原数组,然后比对 3. 没有就存到该数组中
题目要求范围:只返回一个去重的数组,不做任何额外要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array.prototype.unique1 = function(){
var res = [this[0]]
for(let i = 1; i < this.length; i++){
var repeat = false
for(let j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true
break
}
}
if(!repeat){
res.push(this[i])
}
}
return res
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
console.log(arr.unique1());
初级数组去重

思路:先进行排序,检查原数组中的第i个元素与数组中最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置。如果不相同,则将该元素存在结果中
题目要求范围:不要求数组的顺序,

1
2
3
4
5
6
7
8
9
10
11
12
Array.prototype.unique = function(){
this.sort();
var res = [this[0]]
for(var i = 1; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i])
}
}
return res
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique())

to be countiune