数组array

用来存储一组相关的值
方便求和、计算平均数、逐项遍历等操作
typeof–object
Array.isArray(数组)–true;Array.isArray(对象)–false
鸭式辨型(后期讲)

定义数组

定义方法1: var arr = ['A', 'B', 'C', 'D'];//A是数组的项
定义方法2:var arr = new Array('A', 'B', 'C', 'D');
定义方法3:var arr = new Array(4);//长度为4,4项的值皆为undefined

数组下标

下标从0开始

根据下标访问数组项

可以使用方括号中书写下标的形式,访问数组的任一项

var arr = ['A', 'B', 'C', 'D'];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr[3]);

注:若访问时下标越界返回undefined

var arr = ['A', 'B', 'C', 'D'];
console.log(arr[4]);//undefined
console.log(arr[1000]);//undefined
console.log(arr[-1]);//undefined

根据下标更改数组项

var arr = [2, 6, 7, 3];
arr[1]++;
arr[2] = 0;
console.log(arr);//[2,7,0,3]

注:若更改时下标越界,则会创造这项

var arr = [2, 6, 7, 3];
 arr[6] = 4;
 console.log(arr);//[2,6,7,3,empty*2,4]

length属性

表示长度
利用下标&length属性遍历数组

 var arr = [2, 6, 7, 3];
 for (i = 0; i < arr.length; i++)
     console.log(arr[i]);

方法

尾部插入一个/多个元素push()

参数:插入的元素;若插入多个元素用逗号隔开
返回值:数组的新长度

var arr = [2, 6, 7, 3];
var item = arr.push(4, 5);
console.log(item);//6
console.log(arr);//[2,6,7,3,4,5]

尾部删除一个元素pop()

无参数;
返回值:被删除的元素

var arr = [2, 6, 7, 3];
var item = arr.pop();
console.log(item);//3
console.log(arr);//[2,6,7]

头部插入一个/多个unshift()

参数:插入的元素;若插入多个元素用逗号隔开
返回值:数组的新长度

var arr = [2, 6, 7, 3];
var item = arr.unshift(4, 5);
console.log(item);//6
console.log(arr);//[4,5,2, 6, 7, 3]

头部删除一个shift()

无参数;
返回值:被删除的元素

var arr = [2, 6, 7, 3];
var item = arr.shift();
console.log(item);//2
console.log(arr);//[6, 7, 3]

替换、插入、删除splice()

语法:array.splice(index,howmany,item1,.....,itemX)

1.替换指定项–3个参数完备

var arr = [2, 6, 7, 3, 4, 5];
arr.splice(2, 3, 1, 2, 3);
console.log(arr);//[2, 6, 1, 2, 3, 5]
var arr = [2, 6, 7, 3, 4, 5];
arr.splice(2, 5, 1, 2, 3);
console.log(arr);// [2, 6, 1, 2, 3]
var arr = [2, 6, 7, 3, 4, 5];
arr.splice(2, 2, 1, 2, 9);
console.log(arr);//[2, 6, 1, 2, 9, 4, 5]

2.指定位置插入新项–2参为0

 var arr = [2, 6, 7, 3, 4, 5];
 arr.splice(2, 0, 1, 2, 3);
 onsole.log(arr);//[2, 6, 1, 2, 3, 7, 3, 4, 5]

3.删除指定项–省略3参

 var arr = [2, 6, 7, 3, 4, 5];
 arr.splice(2, 3);
 console.log(arr);//[2,6,5]

截取slice()

语法:slice(a,b)
从下标为a的项开始,到下标为b的项结束(不包括下标为b的项)
slice()省略第二个参数,默认到最后一项结束
slice()参数为负时,表示数组的倒数第几项

数组转为字符串join()

参数:字符,表示以什么字符作为连接符;
默认值:逗号;效果同toString()

var arr = [2, 6, 7, 3];
console.log(arr.join());//2,6,7,3
console.log(arr.toString());//2,6,7,3
console.log(arr.join('-'));//2-6-7-3
console.log(arr.join('*'));//2*6*7*3

字符串转为数组split()

参数:字符,以什么字符拆分字符串

var str = 'a-b*c-d*e';
console.log(str.split());//['a-b*c-d*e']
console.log(str.split(''));//['a', '-', 'b', '*', 'c', '-', 'd', '*', 'e']
console.log(str.split('-'));//['a', 'b*c', 'd*e']
console.log(str.split('*'));//['a-b', 'c-d', 'e']

合并连接concat()

var arr1 = [1, 2];
var arr2 = [4, 5, 6];
var arr3 = [7, [8]];
console.log(arr1.concat(arr2, arr3));// [1, 2, 4, 5, 6, 7, [8]]]

翻转reverse()

var arr1 = [1, 2, 7, 8];
console.log(arr1.reverse());//[8, 7, 2, 1]

搜索indexof()、includes()

indexof()搜索数组中的元素,返回位置;若不存在返回-1
includes()判断数组是否包含某值,返回布尔值

排序sort()

数组有sort()方法可以用于数组排序,但是涉及到函数的相关知识,在函数一节课进行介绍。
除内置排序方法外,还有一些排序算法:冒泡排序我们稍后介绍,快速排序在函数一节课介绍。

算法-求最值

var arr = [1, 2, 7, 8];
var min = arr[0];
var max = arr[0];
for (var i = 0; i < arr.length; i++) {
    min = arr[i] < min ? arr[i] : min;
    max = arr[i] > min ? arr[i] : max;
}
console.log(min);
console.log(max);

算法-去重

利用includes()、 push()

var arr = [3, 4, 2, 3, 4, 1, 5, 8, 2];

var result = [];
for (var i = 0; i < arr.length; i++) {
//若结果数组中无该元素,则推入
    if (!result.includes(arr[i])) {
        result.push(arr[i]);
    }
}
console.log(result);//[3, 4, 2, 1, 5, 8]

算法-随机样本

题目:请随机从原数组中取3项

function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
}
var arr = [3, 4, 2, 3, 4, 1, 5, 8, 2];
var result = [];
//控制取项的个数
for (var i = 0; i < 3; i++) {
    //1.生成随机下标
    j = getRandomIntInclusive(0, arr.length - 1);
    //2.随机下标对应的项插入结果数组
    result.push(arr[j]);
    //3.删除原数组中的该项
    arr.splice(j, 1);
}
console.log(result);

算法-冒泡排序

4个数,共需比3趟,比较次数:3+2+1=6次
n个数,共需比n-1趟,比较次数:n(n-1)/2次

冒泡排序-上浮法

var arr = [6, 5, 4, 3, 2, 1];
//控制趟数
for (var i = 1; i < arr.length; i++) {
  //控制比较的次数:最后一项冒泡到相应位置
  for (var j = arr.length - 1; j >= i; j--) {
    //小的往上(前)冒
    if (arr[j] < arr[j - 1]) {
      var temp = arr[j - 1];
      arr[j - 1] = arr[j];
      arr[j] = temp;
    }
  }
}
console.log(arr);

冒泡排序-下沉法

var arr = [6, 5, 4, 3, 2, 1];
//控制趟数
for (var i = 1; i < arr.length; i++) {
  //控制比较的次数:第一项冒泡到相应位置
  // 第1趟--比较n-1次
  // 第2趟--比较n-2次
  for (var j = 0; j <= arr.length - i; j++) {
    //大的往下(后)沉
    if (arr[j] > arr[j + 1]) {
      var temp = arr[j + 1];
      arr[j + 1] = arr[j];
      arr[j] = temp;
    }
  }
}
console.log(arr);

算法-二维数组

数组作为数组元素

var matrix = [
    [12, 13, 14],
    [23, 24, 25],
    [31, 35, 38],
    [43, 44, 45]
]
console.log(matrix.length);//4
//遍历二维数组
for (i = 0; i < matrix.length; i++) {
    for (j = 0; j < matrix[i].length; j++)
        console.log(matrix[i][j]);
}

算法-复制数组

var arr2=arr1不能复制数组,该如何呢

浅克隆-一维数组- push()

只能克隆第一层

var arr = [1, 2, 3, 4];
var result = [];
for (var i = 0; i < arr.length; i++) {
    result.push(arr[i]);
}
console.log(result);//[1, 2, 3, 4]
//两数组的址不同意味着实现了赋值
console.log(result == arr);//false

//改变原数组的值,新数组的值不会变
arr.push(5);
console.log(result);//[1, 2, 3, 4]

深克隆-多维数组-藕断丝连问题

若是多维数组,或数组中的项是其他引用类型值,要使用递归技术,在后面课程介绍

var arr = [1, 2, 3, [4, 5, 6]];
var result = [];
for (i = 0; i < arr.length; i++) {
    result.push(arr[i]);
}
console.log(result == arr);//false藕断
console.log(result[4] == arr[4]);//true丝连

辨析数组、字符串

字符串也可以使用方括号内写下标的形式,访问某个字符,等价于charAt()方法
字符串的一些算法问题有时候会转换为数组解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值