JavaScript数组学习总结
数组
数组
1.数组:数组是一组数据(数据类型不限,任意)的有序集合===>我们写代码,一般一个数组只放一种数据类型的数据
2.我们写代码,一般一个数组只放一种类型的数据
3.注意: 大多数的语言里面数组的存储是连续的,但是js的数组特点决定了js的数组不一定是连续的。
数组的特点
1.作用:将许多零散的数据组成一个整体
2.数组本身属于复杂数据类型(引用数据类型/对象),即我们使用的数组就是“对象”
3.数据类型不限,任意(一般一个数组只放一种数据类型的数据)
4.根据需要,对数组内部数据进行一些操作(增删查改)
数组的创建
1.字面量的方式
例如: let arr = [];(没有初始化值)
例如: let arr = [ 1,2,3,4,5,"6"];(初始化了六个值)
2.构造函数的方式
例如: le arr = new Array();(没有初始化值)
例如: let arr = new Array(1,2,3,4,5,"6")(为数组初始化)
如果let arr = new Array(5)就相当于创建了五个空元素的arr数组
数组的下标
数组中存储是数据时有序的,我们就给每一个元素加一个编号,称之为“下标”/"索引"(index)
索引的特点: index从0开始,到 “数组元素个数-1” 结束
下标的使用: 数组名称[index]===> 查看数据:(查询时,越界?访问到一个undefined值,不管学什么语言,越界一般是不允许的)
多维数组
数组里面嵌套数组的这种结构,就叫做多维数组。二维数组本质上就是一维数组作为了一个一维数组的元素,即数组的数组;
例如:let arr = [[1,2,3],[4,5,6]];
数组的遍历
1.普通for循环
2.for...of遍历(ES6新增的)注意:可以把value看成每次循环按顺序取了arr中元素的值,而value不代表arr的元素,所以value的赋值不影响arr中的元素
ES6中的操作
1.扩展
“...”:扩展运算符 ===>把一个整体扩展开来,相当于解构一个数组的一个维度。
运用:
a.合并数组 let newArr = [...arr1,...arr2]
b.拷贝数组 let arr2 = [...arr1]
2.解构
等号两边保持解构一致(关于数组),然后按照对应的位置,把右边的数据赋值给左边的变量;实现批量赋值
注意
a、当左边的变量多余右边的数据时:没有对上号的变量值不变
b、当左边的变量少余右边的数据时:没有对上号的数据不影响赋值
运用场景
a、墨水交换
let num1 = 9,num2 = 0,t;
[num1,num2] = [num2,num1];
b、获取对应的值(前面用逗号隔开)
let [,,,d,e] = arr;
排序 例如:冒泡与选择等
1.冒泡排序
let array = [5,2,7,9,8,0,44,121,1];
for(let i = 0; i < array.length - 1; i++){
for (let j = array.length - 1; j > i; j--) {
if(array[j]<array[j - 1]){
[array[j],array[j - 1]]=[array[j - 1],array[j]];
}
}
}
console.log(array);
2.选择排序
let array = [5,2,7,9,8,0,44,121,1];
for (let i = 0; i < array.length-1; i++) {
let min = array[i],index=i;
for (let j = 1+i; j < array.length; j++) {
if(min > array[j]){
min = array[j];
index = j;
}
}
[array[i],array[index]]=[array[index],array[i]];
}
数组的方法(都很实用)
1.添加
push(value) 概念:在尾部添加元素,并返回一个新的长度
unshift(value) 概念:在数组开头添加元素,并返回一个新的长度
2.删除
pop() 概念:删除最后一个元素
shift() 概念:删除第一个元素
splice(参数1,参数2,参数3)
第一个参数:整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
第二个参数:要删除的项目数量。如果设置为 0,则不会删除项目。
第三个参数以及后面的参数:可选。向数组添加的新项目。
返回值:包含被删除项目的新数组,如果有的话。
3.查找
indexOf(value) 概念:查找所在位置(index),从头开始查,查到第一个结束
lastIndexOf(value) 从尾部开始查找和indexOf相反
includes(value) 要查询的值,返回有没有(true/false)
4.提取
slice() 通过指定开始和结束索引,来提取元素(组成新数组),不影响原数组===>[start,end)
5.拼接
join("value")拼接:separator参数代表了“分隔符”
6.切割
split("value") 切割:上一个方法的反向操作
7.其它
concat()
把B数组拼接到A数组后,作为返回值返回,不影响原数组
reverse()
反序的改变原数组
sort()
默认规则是按照字典顺序的
ex.sort(function(a,b){
return a-b;//结果是负数b大,正数a大,相等值为0
});
ex.reverse();
console.log(ex);//true====》没有副本的产生,返回值就是原数组
数组的遍历
- foreach 普通遍历,没有return返回值
- map 单独处理每一个元素:会把每一个元素做return后面的处理,返回组成新的数组
- filter 过滤,满足条件留下组成新数组
- some/every some(只要有一个满足,返回true)/every(必须全部满足,才返回true)
- reduce/reduceRight(迭代计算)
- 将数组第一个元素和第二个元素分别赋值给prev,next,然后通过return后面的表达式获得一个值,该值作为下一次循环的prev,而next取下一个元素,直到取完所有元素,获得的最终值作为 返回值返回
JavaScript数组学习总结的更多相关文章
- javascript 数组学习(一)
今天学习了一下<javascript权威指南(第6版)>的第七章:数组 一.数组的创建: 数组的创建有3种方法: var colors = new Array(3);//可以省略new v ...
- Javascript数组学习
记录下学习数组的过程 1.创建数组 var ary1 = new Array();//空数组 var ary2= [] ;//字面量 2.数组检测 //方法一 if(array instanceof ...
- 【学习笔记03】Javascript数组学习
数组定义的方法一: var Myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度2 Myarr[i]=new Array(); //再声 ...
- javascript数组学习1
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JavaScript 数组学习总结
类数组转数组 ES5解决方案 let arr = Array.prototype.slice.call(arrlike) ES6解决方案 let arr = Array.from(arrlike) / ...
- JavaScript数组(二)实例
一.Js 数组示例常用操作. $(function () { Javascript数组学习 var nums = new Array([10], [5],[ 8], [2], [3]); 数组反转 n ...
- RX学习笔记:JavaScript数组操作
RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...
- [前端JS学习笔记]JavaScript 数组
一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {&qu ...
- JavaScript基础学习(三)—数组
一.数组简介 JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...
随机推荐
- Learning WCF:Fault Handling
There are two types of Execptions which can be throwed from the WCF service. They are Application ex ...
- es2017新特性
2017年6月底es2017不期而至; 截止目前es8是ecmascript规范的第九个版本:自es2015开始ECMA协会将每年发布一个版本并将年号作为版本号:算了 直接看下es2017的新特性: ...
- Hibernate入门1 - Hibernate概述及第一个小例子
一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...
- sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]
sublime text x是个很不错的编辑器,但是各种插件都需要自己安装,有时也有点不方便,尤其是自己还不不知道怎么安装的时候.开发中经常用到的,函数跳转,就是一个比较难安装的东西,记录如下(系统为 ...
- 转载 用Python实现设计模式——工厂模式
转载自 SegmentFault作者 夏秋, https://segmentfault.com/a/1190000013053013 非常感谢这位作者的深入浅出的讲解. 前言 工厂模式,顾名思义就是我 ...
- Servlet-转发和重定向的区别
实际发生位置不同,地址栏不同 转发是发生在服务器上的 转发是由服务器进行跳转的,细心的朋友会发现,在转发的时候,浏览器的地址栏是没有发生变化的,在我访问Servlet111的时候,即使跳转到了Serv ...
- linux中变量的一些操作方法
常见的一般有如下操作,可以对字符串进行简单操作: echo ${#var}打印变量var长度 echo "$var:3:8" 打印变量var第4个字符开始的8个字符echo ${v ...
- 以ActiveMQ为例JAVA消息中间件学习【4】——消息中间件实际应用场景
前言 当前真正学习消息中间件,当前已经走到了,可以简单的使用,网上有很多那种复杂的高可用的架构,但是那些都是对于一些比较大型的项目来说的. 对于一些小型的项目可能用不到那么大的架构,于是我们需要从最简 ...
- ida 调试 android fork
在使用ida 调试android native代码时经常会碰见fork子进程的情况出现,而运行一个 android_server只能对一个进程进行调试或者attach,而ida 默认端口是23946, ...
- 学习html5的网站
http://www.html5cn.org/ http://www.html5china.com/ http://www.mhtml5.com/