数组1111

1、数组简介

1. 数组属于对象类型(复杂类型)

2. string boolean number undefined 属于基础类型(简单类型)

数组中可以存放任意类型的数据

数组的声明

1. let arr = [1,2,3,4];

2. 结合构造函数,创建数组

let arr = new Array(4);

注意:使用  构造函数声明数组的时候,如果只有一个number类型的参数,则表示数组长度,而数组内容为空,如果参数是两个及其以上的数字,则表示元素

let arr1 = [1,2,'封神','妲己'];
console.log(arr1);

//使用 Array() 构造函数创建数组
let arr2 = new Array();
console.log(arr2);

let arr3 = new Array('殷寿');
console.log(arr2);

//如果 Array 的参数只有一个数字类型数据,则表示数组长度,该数组中的数据都是空
let arr4 = new Array(4);
console.log(arr4);
//如果是两个及其以上,则表示数组中的元素
let arr5 = new Array(4,5);
console.log(arr5);

数组长度的设置和获取

使用 数组的 length 属性,既可以设置数组长度,也可以获取数组长度

let arr6 = [false,'灰太狼','23,'刘备'];
//获取数组长度,也就是数组中有几个元素
console.log(arr.length); 

//删除数组元素
arr.length = 2; 
//长度小于数组长度时会删除数组元素
console.log(arr6);

//清空数组
arr6.length = 0;
console.log(arr6);

2. 获取数组元素和数组遍历

形如

let arr1 = [,,,];

let arr2 = [,,,3,4];

console.log(arr.length,arr2.length);

在计算该数组长度的时候,最后一个逗号后面如果为空,则不计入数组长度

数组当中的每一个元素,都对应一个数组下标(索引),下标从0开始计算

获取数组中的数据可以通过 arr[下标] 的方式获取

let arr3 = ['武松','武大郎','潘金莲','宋江'];
console.log(arr3[2]);

//随机获取下标,范围是 [0,3]
let num = parseInt(Math.random()*4);
//let num = Math.floor(Math.random()*4);
console.log(arr3[num]);

遍历数组

1. for 循环

2. for-in 循环

3. foreach 函数

for循环

let arr4 = ['碧玺','霸下','腾蛇','白溪'];
//for 循环
for(let i=0;i<arr4.length;i++){
    console.log(arr4[i]);
    document.write(arr4[i]+'<br/>');
}

for-in 循环

还可以循环对象

for(let key in arr4){

        key 是循环的下标,key 是变量,可以随意命名

        arr4 是要循环的对象

}

for(let aa in arr4){
    document.write(arr4[aa]+'<br/>');
}

forEach() 函数

es6中推荐使用 数组方法,forEach()

它里面传入的是一个函数,该函数具有一个形参 item,item就是当前循环的数组元素

arr4.forEach(function(item){
    document.write(item+'<br/>');
})


3. 数组的增删

使用数组的增删方法,以下5个方法,都会改变原数组

1. push() 方法

参数是 1个 或者任意多个

向数组 末尾 添加元素

返回值是 新数组的长度

let arr1 = ['韩愈','柳宗元','王安石','苏轼'];
//向 arr1 的末尾添加元素
let arr2 = arr1.push('苏辙','苏洵');
console.log(arr1);
console.log(arr2); //长度是6

arr1.push('欧阳修','曾巩');
console.log(arr1);

2. unshift () 方法

参数是 1个 或者任意多个

向数组 头部 添加元素

返回值是 新数组的长度,在 ie6 7 下面,没有返回值

let arr3 = ['灵明石猴','六耳猕猴']; 
//向 arr3 的头部添加元素
arr3.unshift('通臂猿猴','赤岗马猴');

console.log(arr3);

3. pop () 方法

没有参数

向数组的 尾部 删除一个元素(每一次只能删除一个)

返回值是 被删除的元素

let arr4 = ['灵明石猴','六耳猕猴','通臂猿猴','赤尻马猴'];
console.log(arr4);
//删除 尾部 一个元素
arr4.pop();
console.log(arr4);

//pop()方法的返回值是 删除的那个元素
let str = arr4.pop();
console.log(arr4,str);

4. shift() 方法

 没有参数

向数组的 头部 删除一个元素 (每一次只删除一个)

返回值是 被删除的元素

let arr5 = ['水稻','麦子','粟','稷'];
//从 头部 删除一个数组元素
arr5.shift(); 

console.log(arr5);

5. splice() 删除、替换

从数组的任意位置开始,对指定长度的内容进行删除,替换操作,可以插入任意数据类型的元素

参数1:表示删除,替换的起始位置

参数2:设置操作数据的长度,包含起始位置

参数3:替换的新元素,也可以不写该参数

参数2  如果不写,则表示从参数1开始,一直到数组的最后,全部删除

返回值是 删除的元素所组成的数组

let arr6 = ['马','牛','羊','鸡','狗','猪'];

//在 下标为1的位置开始 删除两个元素,并替换新元素
arr6.splice(1,2,'鹅');
console.log(arr6);

//从下标为2的位置开始(包括2),删除后面所有元素
arr6.splice(2);
console.log(arr6);

let arr7 = arr6.splice(2);
console.log(arr6);
console.log('返回值',arr7);


4. 数组的提取类

indexOf() 方法

返回值是 指定内容在数组中的下标

参数1:指定的元素内容

参数2:指定开始查找的位置,如果没有第二个参数,默认为0

特点:

1.  从指定的位置开始查找

2. 找不到的话 返回-1

3. 第二个参数不能为负数

let arr1 = ['马','牛','羊','鸡','狗','猪'];

let n1 = arr1.indexOf('鸡');
console.log(n1);  // 3
let n2 = arr1.indexOf('驴');
console.log(n2);  // -1

let n3 = arr1.indexOf('马',3);
console.log(n3);  //-1

找到所有值为3的下标

let arr = [1,2,3,1,3,4,5,6,3];
let n = arr.indexOf(3);
console.log(n);  //2

// 在循环外部创建一个新数组
let arrIndex = [];
for(let i=0;arr.indexOf(3,i) != -1;){

    let n = arr.indexOf(3,i);
    console.log(n);
    arrIndex.push(n);
    i=n+1;

}
console.log(arrIndex);  //[2, 4, 7]

数组去重

let arr1 = [1,2,3,4,4,4,3,2,1,];
let arr2 = [];

for(let i=0;i<arr1.length;i++){
    //如果 arr2 中不存在当前 循环的元素
    if(arr2.indexOf(arr1[i]) == -1;
    //把 不存在的元素添加到 arr2中
    arr2.push(arr3[i]);
}
console.log(arr2);

lastIndexOf() 方法

用法和indexOf()一样,只不过是从指定的位置 往前 查找

let arr5 = ['马','牛','羊','鸡','狗','猪','羊'];
let n6 = arr5.indexOf('羊');
console.log(n6);  //2

let n7 = arr5.lastIndexOf('羊');
console.log(n7);  //6

if(n6==n7){
    console.log('只有一只羊');
}else{
    console.log('不仅仅只有一只羊'); //不仅仅只有一只羊
}


5. 数组截取

slice() 截取

参数1:开始截取的下标位置

参数2:结束截取的下标位置

截取的结果 包含开始位置,不包含结束位置

如果参数为负整数,则表示从后面开始往前计算,从-1开始计算

 特点:

        1. 截取的时候,必须保证开始位置在结束位置之前,否则 截取为空数组

        2. 参数必须是正整数,负整数或者0,其他非法字符都会被解析为0

        3. 如果不写结束位置,则直接截取到最后

        4. 如果没有参数,则会把整个数组截取,可以理解为 复制数组

let arr1 = [1,2,3,false,3>4,'葫芦娃','黑猫警长';
let arr2 = arr1.slice(2,5);  //截取2 3 4

console.log(arr1);  //[1, 2, 3, false, false, '葫芦娃', '黑猫警长']
console.log(arr2)  //[3, false, false]

没有参数,复制一个数组

let arr6 = arr4.slice();
console.log(arr6);

arr6[4] = '灌篮高手';
//灌篮高手 ['葫芦娃', '黑猫警长', '虹猫蓝兔七侠传', '猪猪侠', '汪汪队']
console.log('灌篮高手',arr4);


6. 数组操作方法

concat() 数组合并

参数是要合并的数组,可以是多个,使用逗号隔开

返回值是一个合并后的数组

let arr1 = ['妇好','花木兰'];
let arr2 = ['貂蝉','安琪拉'];
let arr3 = ['钟无艳','姬小满'];
//合并数组
let arr4 = arr1.concat(arr2,arr3);
console.log(arr4);

let arr5 = arr4.concat(['伽罗']);
console.log(arr5);

join() 方法

数组转化为字符串

参数只有一个,设置拼接的字符串,默认是英文逗号,也可以设置其他的符号

let arr1 = ['妇好','花木兰'];
//使用 $ 把数组元素拼接成一个字符串
let str1 = arr.join('$');
console.log(str1);  //妇好$花木兰

split() 切割

把字符串切割成数组,参数是切割符

let arr6 = str1.split('钟无艳');
console.log(arr6);

let arr7 = ['信阳','焦作','安阳','开封','巩义'];
let arr8 = [];
for(let i=arr7.length-1;i>0;i--){
    arr8.push(arr7[i]);
}
console.log(arr8);

reverse() 翻转

直接翻转数组,修改数组本身

let arr7 = ['信阳','焦作','安阳','开封','巩义'];
arr7.reverse();
console.log(arr7); //['巩义', '开封', '安阳', '焦作', '信阳']

练习

let n = '李子';
//每一个字符之间是空字符
//切割成数组
let arr9 = n.split(''); //变成数组
console.log(arr9);
//翻转数组
arr9/reverse();
//转化成字符串
let str2 = arr9.join('');
console.log(str2);


7. 数组检测方法

every() 方法

检测数组中 所有的元素 是否满足条件,如果都满足则返回true,否则返回false

使用方式

        arr.every(function)(ele){

                return 判断条件

        })

ele 是每一次循环时候的数组元素,当判断条件都为true的时候,every()返回true

let arr1 = [3,6,9,12,11]
let bol = arr1.every(function(aa){
    console.log(aa);  //3 6 9 12
    return aa%3==0;
})
console.log(bol);  //false

let bol2 = arr1.every(function(ele){
    return ele>0;
})
console.log(bol2);  //true

some() 方法

检测数组中所有的元素是否满足条件,如果都不满足 则返回false,否则返回true

即是 只要有一个满足条件的元素,就返回true,用法和 every 一致

let arr2 = [2,4,6,8,10];
//有一个满足 就返回true
let bol3 = arr2.some(function(ele){
    return ele%5==0;
})
console.log(bol3);  //true

filter()  过滤

把满足条件的数组元素分离到一个新的数组中,原数组不变

let arr1 = [1,2,3,4,5,6,7];
//把 arr1 中的偶数 提取到 arr2 中,过滤掉不满足的
let arr2 = arr1.filter(function(ele){
    return ele%2==0;
})
console.log(arr2);  //[2, 4, 6]

map() 数组映射

可以给数组的所有元素进行 统一 的操作,返回的是统一操作之后的数组

let arr1 = [1,2,3,4,5,6,7];

let arr2 = arr1.map(function(ele){
    return ele+'px';
})
console.log(arr2);  //['1px', '2px', '3px', '4px', '5px', '6px', '7px']


8. 数组排序

sort() 排序

对数组进行排序,该方法改变的是原数组

sort 默认把 number 类型转化为 string 类型,然后根据字符串的 字符编码 比较大小

字符串大小的比较原则

几个字符串比较大小,会依次比较每一位置上的字符编码大小,直到比较出大小之后,就不在比较,后面的直接省略

字符编码排序规则

    数字 0-9

    A-Z,a-z 依次变大

    A<a

let arr1 = [1,4,6,3,2,10];
arr1.sort();
console.log(arr1);  //[1, 10, 2, 3, 4, 6]

let arr2 = ['e','ab','ac','b'];
arr2.sort();
console.log(arr2);  ['ab', 'ac', 'b', 'e']

let arr3 = ['刘备','关羽','张飞','曹操'];
arr3.sort();
console.log(arr3);  //['关羽', '刘备', '张飞', '曹操']

一般的,在进行排序的时候,会给 sort() 传入一个参数,该参数是一个函数,在函数中设置排序规则,该函数必须有返回值

函数的返回值

return 参数1 - 参数2;从小到大排列

return 参数2 - 参数1; 从大到小排序

规则:

当返回一个正数,就会交换两者的位置

当返回一个负数,不会交换两者的位置

当返回一个0,则认为这两个数字相等,也不会交换位置

let arr4 = [110,11,23,45,2,1,90];

arr4.sort(function(a,b){
    return a - b;  //从小到大排列
})
console.log(arr4);  //[1, 2, 11, 23, 45, 90, 110]

数组打乱

let arr5 = ["司马懿","王昭君","赵云","夏侯惇","李白","曹操","关羽"];

arr5.sort(function(a,b){
    return Math.random() - 0.5;
})
console.log(arr5);  //每次都会随机排列


9. 冒泡排序

比较的数组,每一次比较的趟数,和对应比较的次数关系是

一共比较的趟数是 arr.length - 1

每一轮比较的次数是 arr.length - 当前的轮数 

建议外层变量从 i=1 开始,则外层比较的轮数为 arr.length ;则 内层变量从 j=0 开始,比较的次数为 j<arr.length - i;

let arr = [3,5,4,2,1];
//外层控制比较的趟数(轮数)
let(let i=1;i<arr.length;i++){
    //内层控制 比较的次数
    for(let j=0;j<arr.length-i;j++){
        if(arr[j]>arr[j+1]){
            let temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}
console.log(arr);  //[1, 2, 3, 4, 5]

冒泡排序练习:随机生成 随机生成 [10,80] 的10个整数,然后进行冒泡排序

//随机生成 [10,80]的10个整数,然后进行冒泡排序
let arr = [];
for(let i=0;i<10;i++){
    let n = Math.floor(Math.random()*71+10);
    arr.push(n);  //将n中10个随机整数添加至arr
}
for(let i=1;i<arr.length;i++){
    for(let j=0;j<arr.length - i;j++){
        if(arr[j]>arr[j+1]){  //升序
            let temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}
console.log(arr);
console.log('最大值是'+arr[arr.length - 1]);
console.log('最小值是'+arr[0]);

数组练习

let val = document.getElementById('txt');
let btn = document.getElementById('btn');

let arr = ['百里守约','百里玄策','百里屠苏','李信','苏烈','盾山'];
btn.onclick = function(){
    let val1 = val.value;
    let a = arr.indexOf(val1);
    if(a>=0){  //判断arr中存在val1
        arr.splice(a,1);  //在a的位置上删除一个元素
        alert('删除成功');
        console.log(arr);
    }else{
        alert('用户信息不存在');
    }
    //复位输入框
    val1.value='';
}


10. 二维数组

二维数组 指的是数组的每一个元素也是一个数组

获取数组中的元素  arr[ i ] [ j ]

第一个下标 表示的是 arr中的第几个数组

第二个下标 表示的是 该数组中的第几个元素

遍历二维数组,需要使用双重for循环

let arr1 = ['将患处','苏沪','姜子牙'];
let arr2 = ['李信','苏烈','盾山'];
let arr3 = ['百里守约','百里玄策','百里屠苏'];
//此刻 arr4就是一个二维数组
let arr4 = [arr1,arr2,arr3,['黄海波','李易峰','吴亦凡','王力宏']];
console.log(arr4[2][2]);  //百里屠苏

//遍历二维数组
for(let i=0;i<arr4.length;i++){
    for(let j=0;j<arr4[i].length;j++){
        document.write(arr4[i][j]);
    }
    document.writr('<hr/>');
}

练习:求最大值 最小值

let arr5 = [[1,34,5],[2,56,4,],[2,3,39]];

let max = arr5[0][0];
let min = arr5[0][0];
for(let i=0;i<arr5.length;i++){
    for(let j=0;j<arr5[i].length;j++){
        if(arr5[i][j]>max){
            max = arr5[i][j];
        }
        if(arr5[i][j]<min){
            min = arr5[i][j];
        }
    }
}
 document.write('最大值是'+max+';最小值是'+min);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值