“ 程序中处理数据是必不可少的一部分,而一般来说数据的出现体量都会比较大切带有一些相同点;因此在程序中如何处理一堆数据,并且这堆数据都还有着一些相同时,就是非常重要的了。最佳的解决方式就是使用集合了”
01
—
集合的定义
计算机科学中,集合是一组可变数量的数据项(也可能是 0 个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,这些数据项的类型是相同的,或是满足相同的条件,或者遵循相同的规则。
集合的特点:长度可变。
正常来说,传统的数组(C,JAVA 中)是不属于集合的。在 JAVA 或者 C中,数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合大小不固定,是可以动态扩展容量的,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用集合,数组不适用。
但是在我们的 JavaScript 当中数组发生的巨大的变化,更灵活,更方便,与传统意义上的数组只是“形似“,包括在 V8 引擎反编译之后对应的不是 C 语言中的真实数组,在加上 JavaScript 是解释型语言,在加上反编译,执行效率自然就会偏低一些。现在有了一个集合的概念,很大很广泛。根据这样的集合大概念,在加上不同的共享特征,或者是统一的条件,就可以抽象出来称为一个新的集合。
先从 JS 的 Array 说起。
JS 数组是一个集合,这个集合的特点是,存储一些有序的内容(通过下标访问),长度可变,类型不限制。但是基于前车之鉴,在 JS 数组封装的同时添加多种的遍历方式(forEach, map,等等),支持栈操作(push,pop),队列操作(shift, unshift),包括更灵活的在数组中插值,删值等功能。
我们需要这种线性的结构用于存储数据,在 js 定制初期的时候,就把数组引入进来,后续的不断发展中得到我们现在的数组。
对于 JS 对象是一种满哈希表结构(散列表)。
在我们已有数组这种结构的基础之上,我们会有一个很常用的需求,数组去重。