Skip to content

Commit 6184373

Browse files
author
threerocks
committed
fix
1 parent c310eca commit 6184373

32 files changed

Lines changed: 845 additions & 5 deletions

CSS3属性速查表.pdf

916 KB
Binary file not shown.

GitHub入门与实践.pdf

20.3 MB
Binary file not shown.
38.8 MB
Binary file not shown.
25.9 MB
Binary file not shown.

HTML5标签列表.pdf

890 KB
Binary file not shown.

HTTP协议中文版.pdf

693 KB
Binary file not shown.

HTTP协议分析.pdf

187 KB
Binary file not shown.

HTTP协议详解.pdf

205 KB
Binary file not shown.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# JavaScript中Array的一些操作
2+
## 1、判断一个对象是否为数组
3+
```
4+
function isArray(a) {
5+
return Array.isArray ? Array.isArray(a) : Object.prototype.toString.call(a) === '[object Array]';
6+
}
7+
```
8+
  Array.isArray是ES6新增的一个方法,考虑不是所有浏览器都支持ES5,先做判断,如果浏览器支持Array.isArray()则使用,否则使用Object.prototype.toString.call()方法,注意这里说的toString()是Object原型链上的toString()方法,和obj.toString()是两码事。Object.prototype.toString.call()只会返回[Object [[Class]]]这种形式。
9+
## 2、数组虑重
10+
  一共总结了四种方法,其中前面两种实际编码中不会用到,但是面试的时候可以提一下。
11+
#### 双重循环
12+
  就不多说了,挨个儿比较,时间复杂度为O(n^2)。
13+
#### 排序后遍历
14+
  先对数组排序,由于数组已经有序,只需要检查数组中第i个元素与新的结果数组中最后一个元素是否相等即可,如果不相等,则放到新的结果数组中,这种方法的时间复杂度为O(n),但是还要考虑排序的消耗,所以同样不可取。这两种方法比较简单,均不上代码。
15+
#### Hash的方法
16+
  散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
17+
  把Hash表用于数组去重就在于,把数组的值依次存入Hash表的Key值,Value值可以存储Key出现的次数。存取的时候产生冲突的话,忽略该元素,反之把该元素存入新数组。该方法时间复杂度为O(n),是应用最为广泛的去重方法,而在JavaScript语言中,Hash表是用Object实现的,代码如下。
18+
```
19+
function unique(array) {
20+
var newArray = [];
21+
var object = {};
22+
for (var i = 0; i < array.length; i++){
23+
if(!object[array[i]]) {
24+
newArray.push(array[i]);
25+
object[array[i]] = 1;
26+
}
27+
}
28+
return newArray;
29+
}
30+
```
31+
#### Set()方法
32+
  最新的ES6中新增了Map(),Set()这两种数据结构,以及Array.from()方法,它们底层都是用红黑树实现(一种严格意义上平衡二叉树),它们的操作时间复杂度也就是红黑树的操作时间复杂度都为O(logN)。
33+
  Set()和Map()的区别在于,Set()中的数据没有重复,这个特性刚好可以用于数组去重,且效率非常高,这么好的数据结构在ES6才被实现,真是可惜。
34+
  下面看代码,非常简洁:
35+
```
36+
let arr1 = Array.from(new Set(arr1));
37+
//NodeJS中已经全面支持ES6,这种方法爽的不要不要的。
38+
```
39+
#### 总结
40+
```
41+
function newUnique(arr1) {
42+
return Array.from ? Array.from(new Set(arr1)) : unique(arr1);
43+
}
44+
//unique()为上面的Hash方法函数。
45+
```

0 commit comments

Comments
 (0)