07—数组

一、初识数组

数组是值的有序集合

每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示(从0开始),称为索引,整个数组用方括号表示。

1.数组:一组数据的集合,数组的每一个数据叫做一个元素

2.数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组

3.数组的索引是从零开始的

二、数组的创建方式

1、使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。

注:如果省略数组直接量的某个值,省略的元素将被赋予undefined值。

2、直接实例化,通过构造函数new  Array()创建数组

1、隐式方式直接创建数组

2、规定数组长度,并给数组元素赋值(数组长度可以动态设置)

3、创建数组并根据索引给数组赋值(数组长度可以动态设置)

三、length 数组长度

数组长度 每个数组都有一个length属性,返回数组的元素数量

1、将数组清空的一个有效方法,就是将length属性设为0。

2、如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位。

3、不知道下标时通过arr[arr.length]=”小孙”;直接在数组的最后加元素,当前索引加一

4、在ECMAScript 5中,可以用Object.defineProperty() 让数组的length属性变成只读。

语法object.defineProperty(object, propertyname, descriptor)

一共有三个参数。

object:必须,要在其上添加或修改属性的对象。

propertyname:必需。 一个包含属性名称的字符串。

descriptor: 属性描述符。 它可以针对数据属性或访问器属性。

四、数组的方法

1、数组末尾删除和添加

  • pop()函数删除数组最后一个元素

▪ Pop()会直接修改原数组,而不是创建一个新的数组

▪ 使用pop返回的是删除的元素及元素类型

  • Push()数组末尾添加一个或多个元素,并返回修改后的数组长度(数值类型)

▪ Push()也是会直接修改原数组,而不是创建一个新的数组

  1. 栈的特点:先进后出
  2. 栈的两个方法:入栈和出栈
  3. 入栈:数组结尾添加元素   push()
  4. 出栈:数组结尾删除元素   pop()

2、数组开头位置删除和增加

  • Shift() 删除数组开头第一项
  • Unshift() 数组开头添加一个或者多个元素,并返回修改后的数组长度

  1. 队列的特点:先进先出
  2. 队列的两个方法:入队和出队
  3. 入队:数组末尾添加一个或者多个元素  push()
  4. 出队:删除并返回数组的第一个元素   shift()

3、数组任意位置删除,插入,替换及截取

  1. splice():可以实现删除,插入,替换及截取。直接修改的原数据
  1. 删除:可删除任意数量的元素,需要两个参数(删除的第一项索引,删除的项数)
  2. 插入:可以指定位置插入任意个元素,需提供三个参数(起始位置,删除的项(0),插入的元素)
  3. 替换:可以向指定位置插入任意多个项,需提供3个参数(起始位置,删除项,插入元素)
  4. 截取:返回一个从原始数据中包含的删除项数组

4、截取指定下标的数组和字符串

  1. Slice():截取指定下标的数组元素或者字符串。不修改原数据

     语法:slice(开始下标,结束下标(不包含));

5、IndexOf()查找指定元素下标,从前往后查找

  1. 有重复的就返回第一个元素下标
  2. 元素不存在返回-1

6、LastIndexOf()查找指定元素下标,从后往前查找

  1. 有重复的就返回第一个元素下标
  2. 元素不存在返回-1

7、concat() 方法用于连接两个或多个数组

   该方法会创建当前数组一个副本,不会改变原有数组,返回一个新数组

8、reverse()  反转数组中的顺序,改变的是原来数组,不会创建新数组

9、数组转字符串

join()将数组的元素转成字符串

10、伪数组转数组

Array.from()将伪数组变成数组,只要有length属性就可以转成数组

(对象没有长度所以转不了,使用这个语法得到的时空数组。)

五、多维数组

JavaScript不支持真正的多维数组,但可以用数组的数组来近似。也可以说,数组里放数组。

 

六、遍历

我们可以使用for循环、while循环、for..in或者forEach()方法来遍历数组

一维数组遍历:

  1. ForEach()方法需要一个函数作为参数,此函数是由我们创建的,但是不由我们调用(浏览器调用)我们称之为回调函数。

二维数组遍历

七、数组的排序

1、选择排序

var example=[8,94,15,88,55,76,21,39];
function selectSort(arr){
    var len=arr.length;
    var minIndex,temp;
    console.time('选择排序耗时');
    for(i=0;i<len-1;i++){
        minIndex=i;
        for(j=i+1;j<len;j++){
            if(arr[j]<arr[minIndex]){
                minIndex=j;
            }
        }
    temp=arr[i];
    arr[i]=arr[minIndex];
    arr[minIndex]=temp;
    }
    console.timeEnd('选择排序耗时');
    return arr;
}
console.log(selectSort(example));

 

2、冒泡排序

<script type="text/javascript">
  var my_num = [1,3,9,0,40]
  function num(arr){
   for(var i =0; i< arr.length-1;i++){
    for(var j = 0;j < arr.length-1;j++){
     if(arr[j]>arr[j+1]){
      var tmpe = arr[j];
      arr[j] = arr[j+1];
      arr[j+1]= tmpe;
     }
    }
   }return arr;

  }
  document.write(num(my_num));
  </script>

总结一下冒泡和选择的区别:

冒泡排序是左右两个数相比较,而选择排序是用后面的数和每一轮的第一个数相比较;

冒泡排序每轮交换的次数比较多,而选择排序每轮只交换一次;

冒泡排序是通过数去找位置,选择排序是给定位置去找数;

当一个数组遇到相同的数时,冒泡排序相对而言是稳定的,而选择排序便不稳定;

在时间效率上,选择排序优于冒泡排序。

3、sort()用于对数组元素升序,会直接改变原数组

   会先根据元素第一个字符进行排列

Sort()问题:sort()排序规则是根据Unicode编码表排序的,所以会对字符逐一比较,

升级:sort()函数的参数是一个比较函数

语法:sort(比较函数);

八、数组的过滤

  1. 数组元素过滤  filter()把数组中的某些元素过滤掉,返回剩下的元素,接收的是一个回调函数

(将元素过滤,满足条件的留下,不满足就过滤掉)

   

九、数组去重

  1. 数组元素遍历法去重  利用indexOf()方法
  2. Set方法去重(ES6提供的新的数据结构)

十、数组的交、并集

数组的并集,交集,差集

十一、类数组对象

在JavaScript中,有些对象被称为“类数组对象”。意思是,它们看上去很像数组,可以使用length属性,但是它们并不是数组,无法使用一些数组的方法。

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值