数组及数组中常用的方法

数组及数组中常用的方法

数组是对象数据类型的,它属于特殊的对象

let ary = [12, 23, 34, 45]
console.log(typeof ary); //=>"object"
console.dir(ary); //详细信息

/* ary = {
    0: 12,
    1: 23,
    2: 34,
    3: 45,
    length: 4
}
数字作为索引(Key属性名)
length代表长度
ary[0]根据索引获取指定项的内容
ary.length 获取数组的长度 */
数组中常用的方法
  • 方法的作用和含义
  • 方法的实参
  • 方法的返回值
  • 原来的数组是否会发生改变
1.实现数组增删改的方法

这一部分方法都会修改原有的数组

push

/*
 * push : 向数组末尾增加内容
 * @params
 *   多个任意类型
 * @return
 *   新增后数组的长度 
 */
let ary = [10, 20];
let res = ary.push(30, 'AA');
// 基于原生JS操作键值对的方法,也可以向末尾追加一项新的内容
ary[ary.length] = 40;

//res:return新增后数组的长度
console.log(res, ary); //=>4 [10,20,30,'AA',40]

unshift

/*
 * unshift : 向数组开始位置增加内容
 * @params
 *   多个任意类型
 * @return
 *   新增后数组的长度
 */
let ary = [10, 20];
let res = ary.unshift(30, 'AA');

//res:return新增后数组的长度
console.log(res, ary); //=>4 [30,'AA',10,20,]

//基于原生ES6展开运算符,把原有的ary克隆一份,在新的数组中创建第一项,其余的内容使用原始ary中的信息即可,也算实现了向开始追加的效果
ary = [100,...ary];  
console.log(ary);//=>[100,30,'AA',10,20,]

shift

/*
 * shift : 删除数组中的第一项
 * @params
 *  
 * @return
 *   删除的那一项
 */
let ary = [10, 20, 30, 40];
let res = ary.shift();

console.log(res, ary); //=>10 [20, 30, 40]

//基于原生JS中的delete,把数组当做普通的对象,确实可以删除某一项内容,但是不会影响数组本身的结构特点(length长度不会跟着修改),真实项目中杜绝这样的删除使用
delete ary[0];
console.log(ary); //=>{1:30,2:40,length:3}

pop

/*
 * pop : 删除数组中的最后一项
 * @params
 *  
 * @return
 *   删除的那一项
 */
let ary = [10, 20, 30, 40];
let res = ary.pop();

console.log(res, ary); //=>40 [10, 20, 30]

//基于原生JS让数组长度干掉一位,默认干掉的就是最后一项
ary.length--; //=>ary.length=ary.length-1;
console.log(ary);//=>[10, 20,]

splice

/*
 * splice : 实现数组的增加、删除、修改
 * @params
 *    n,m,X  都是数字  从索引n开始删除m个元素(m不写,是删除到末尾),用x占用删除的部分
 *    n,0,x   从索引n开始,一个都不删,把x放到索引n的前面
 * 
 * @return
 *   把删除的部分用新数组存储起来返回
 */
/* 删除 */
let ary = [10, 20, 30, 40, 50, 60, 70, 80, 90];
let res = ary.splice(2, 4);
console.log(res, ary); //=>[30, 40, 50, 60] [10, 20, 70, 80, 90]
//基于这种方法可以清空一个数组,把原始数组中的内容以新数组存储起来(有点类似数组的克隆:把原来数组克隆一份一模一样的给新数组)
res = ary.splice(0);
console.log(res, ary);//=>[10, 20, 70, 80, 90] []

//删除最后一项和第一项
ary.splice(ary.length - 1);
ary.splice(0, 1);

/* 修改 */
let ary = [10, 20, 30, 40, 50];
let res = ary.splice(1, 2, 'll', 'hh');
console.log(res, ary);//=>[20,30] [10,'ll','hh',40,50]

//实现增加
ary.splice(3, 0, 'lh');
console.log(ary);//=>[10,'ll','hh','lh',40,50]
// 向数组末尾追加
ary.splice(ary.length, 0, 'AAA');
// 向数组开始追加
ary.splice(0, 0, 'BBB');
2.实现数组的查询和拼接

此组方法中,原来数组不会改变
slice

/*
 * slice : 实现数组的查询
 * @params
 *    n,m,  都是数字  从索引n开始,找到索引为m的地方(不包含m这一项)
 * @return
 *   把找到的内容以一个新数组的形式返回
 */
/* 删除 */
let ary = [10, 20, 30, 40, 50];
let res = ary.slice(1, 3);
console.log(res); //=>[20, 30]

//m不写是找到末尾
res=ary.slice(1);
console.log(res); //=>[20, 30, 40, 50];

//数组的克隆,参数0不写也可以,这种克隆方式叫浅克隆
res=ary.slice(0);
console.log(res); //=>[10, 20, 30, 40, 50];

concat

/*
 * concat : 实现数组的拼接 
 * @params
 *    多个任意类型值
 * @return
 *   拼接后的新数组(原来数组不变)
 */

let ary1 = [10, 20, 30];
let ary2 = [40, 50, 60];
let res = ary1.concat('海',ary2);
console.log(res); //=>[10, 20, 30, "海", 40, 50, 60]
3.把数组转换为字符串

原有数组不变

toString

/*
 * toString : 把数组转换为字符串 
 * @params
 *    
 * @return
 *   转换后的字符串,每一项用逗号分隔(原来数组不变)
 */

let ary = [10, 20, 30];
let res = ary.toString();
console.log(res); //=>"10,20,30"
console.log([].toString()); //=>""
console.log([12].toString());//=>"12"

join

/*
 * join : 把数组转换为字符串 
 * @params
 *    指定的分隔符(字符串格式)
 * @return
 *   转换后的字符串(原来数组不变)
 */

let ary = [10, 20, 30];
let res = ary.join('');
console.log(res); //=>"102030"
res = ary.join(' ');
console.log(res); //=>"10 20 30"
res = ary.join('|');
console.log(res); //=>"10|20|30"

res = ary.join('+');
console.log(res); //=>"10+20+30"
console.log(eval(res));//=>60 eval把字符串变为JS表达式执行
4.检测数组中的是否包含某一项

indexOf/lastIndexOf

/*
 * indexOf/lastIndexOf : 检测当前项在数组中第一次或者最后一次出现位置的索引值 (IE6~8中不兼容)
 * @params
 *    要检索的这一项内容
 * @return
 *   这一项出现的位置索引值(数字),如果数组中没有这一项,返回的结果是-1
 * 原来数组不变
 */

let ary = [10, 20, 30, 10, 20, 30];
console.log(ary.indexOf(20));//=>1
console.log(ary.lastIndexOf(20));//=>4

//验证数组中是否包含'hh'
if (ary.indexOf('hh') === -1) {
    //不包含
}

//也可以直接使用ES6新提供的includes方法判断
if(ary.includes('hh')){
    //返回true为包含,false为不包含
}
5.数组的排序或者排列

reverse

/*
 * reverse : 把数组倒过来排列
 * @params
 *    
 * @return
 *   排列后的新数组
 * 原来的数组改变
 */

let ary = [10, 20, 30];
console.log(ary.reverse());//=>[30,20,10]

sort

/*
 * sort : 实现数组的排序
 * @params
 *   可以没有,也可以是个函数
 * @return
 *   排序后的新数组
 * 原来数组改变
 */
let ary = [7, 8, 5, 2, 4, 6, 9];
ary.sort();
console.log(ary); //=>[2, 4, 5, 6, 7, 8, 9]

// SORT方法中如果不传递参数,是无法处理10以上数字排序的(它默认按照每一项第一个字符来排,不是我们想要的效果)
/* ary = [12, 15, 9, 28, 10, 22];
ary.sort();
console.log(ary); //=> [10, 12, 15, 22, 28, 9] */

// 想要实现多位数正常排序,需要给SORT传递一个函数,函数中返回 a-b 实现升序,返回 b-a 实现降序
ary = [12, 15, 9, 28, 10, 22];
// ary.sort(function(a,b){ return a-b; });
ary.sort((a, b) => a - b);
console.log(ary);
6.遍历数组中每一项的方法

forEach

/*
 * forEach : 遍历数组中的每一项内容
 * @params
 *    回调函数
 * @return
 * 
 *    原来的数组不变
 */

let ary = [7, 8, 5, 3, 4, 6, 9];

//基于原生JS中的循环可以实现
// for (let i = 0; i < ary.length; i++) {
//     console.log('索引' + i + '内容' + ary[i]);
// }
ary.forEach((item,index) => {
    //数组中有多少项,函数就会被默认执行多少次
    //每一次执行函数:item是数组中当前要操作的这一项,index是当前的索引
    console.log('索引' + index + '内容' + item);
});

map

/*
 * map: 遍历数组中的每一项内容
 * @params
 *    回调函数
 * @return
 *    回调函数的结果组成了新数组的每一个元素
 *    原来的数组不变
 */
let ary = [7, 8, 5, 3, 4, 6, 9];
let ary2 = ary.map((item,index) => {
    //数组中有多少项,函数就会被默认执行多少次
    //每一次执行函数:item是数组中当前要操作的这一项,index是当前的索引
    console.log('索引' + index + '内容' + item);
    //跟fonEach比,map可以有返回值
    return item;
});
console.log(ary2);//=>[7, 8, 5, 3, 4, 6, 9]

filter

/*
 * filter: 创建一个新数组, 其包含被过滤出来的所有元素
 * @params
 *    回调函数
 * @return
 *    返回一个新的、由过滤的元素组成的数组,如果没有任何数组元素被过滤,则返回空数组。
 *    原来的数组不变
 */
let ary = [7, 8, 5, 3, 4, 6, 9];
let a = ary.filter((item, index, array) => item === 7);
console.log(a);//=>[7]

find

/*
 * find:找到满足条件的元素后会把值返回出来
 * @params
 *    回调函数
 * @return
 *    返回数组中满足条件的第一个元素的值,找不到则返回undefined
 *    原来的数组不变
 */
let ary = [7, 8, 5, 3, 4, 6, 9];
let a = ary.find((item, index, array) => item === 7);
console.log(a);//=>7

some

/*
 * some:可以递归的检测元素,如果有一个返回true
 * @params
 *    回调函数
 * @return
 *    返回true或false
 *    原来的数组不变
 */
let ary = [7, 8, 5, 3, 4, 6, 9];
let a = ary.some((item, index, array) => item === 7);
console.log(a);//=>true

every

/*
 * every:用于递归的检测元素,要所有元素操作都要返回真结果才为真
 * @params
 *    回调函数
 * @return
 *    返回true或false
 *    原来的数组不变
 */
let ary = [7, 8, 5, 3, 4, 6, 9];
let a = ary.every((item, index, array) => item >= 1);
console.log(a);//=>true

Array.prototype 在控制台查看数组中所有提供的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值