web学习笔记(十四)

2024-01-10 12:31:09

目录

1.数组

1.1数组的概念

1.2数组的创建

1.3数组的索引和获取

1.4数组的遍历、长度和检测数据类型

1.5数组的操作

? 1.6深拷贝和浅拷贝

2.数组常用的方法(重点):?

2.1常用方法汇总

2.2?补充:


1.数组

1.1数组的概念

? ? ? ? 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型(字符串,数字,布尔值等)的元素。数组是一种将一组数据存储在单个变量名下的存储方式。

1.2数组的创建

(1)利用 new 创建数组

? ? ? ? ?var 数组名 = new Array();// 创建一个新的空数组?

(2)利用数组字面量创建数组

  • 1. 使用数组字面量方式创建空的数组 var 数组名 = [];
  • 2. 使用数组字面量方式创建带初始值的数组 var 数组名 = ['小白','小黑','大黄','瑞奇'];
  • 数组的字面量是方括号 [ ]
  • 声明数组并赋值称为数组的初始化
  • 这种字面量方式也是我们以后最多使用

1.3数组的索引和获取

(1)索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始),因此数组中的个数要比索引数大一。?

(2)数组的获取:数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的

// 定义数组
var arrStus = [1,2,3];
// 获取数组中的第2个元素
alert(arrStus[1]);

1.4数组的遍历、长度和检测数据类型

? ? ? ?(1)数组的遍历:可以通过for循环把数组中的每个元素从头到尾都访问一次。

var arr = ['red','green', 'blue']; 
for(var i = 0; i < arr.length; i++){
console.log(arrStus[i]);
}

? ? ? ? ?(2)数组的长度:可以使用“数组名.length”可以访问数组元素的数量(数组长度),当我们数组里面的元素个数发生了变化,这个length 属性跟着一起变化。

var arrStus = [1,2,3]; 
alert(arrStus.length);	// 3

?? ? ? ? ??(3)检测数组的数据类型:可以通过运算符 instanceof来检测数组的数据类型。

1.5数组的操作

? ? ? ? (1)增

? ? ? ? ? ? ?格式:数组名[索引号]=值;? eg:? arr[0]=12;

? ? ? ? ? ? ?可以不按照顺序添加,没有数据的索引的位置表现为空属性(empty)

? ? ? ? ? ? (2) ?改

? ? ? ? ? ? ? ? 格式:?数组名[索引号]=新值;?? eg:??arr[0]=22;

? ? ? ? ??(3)删? ? delete 数组名[索引号]? 不是很好用,有隐藏问题,只能清除数据,但对应索引号位置还在。

? ? ?? ? ? ? (4) ?查

? ? ? ? ? ? ? ? ? 格式: console.log(数组名[索引号]);

? 1.6深拷贝和浅拷贝

  1. 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用,拷贝的是引用地址,如果修改任意一个数据,两个数组中数据同步修改。

  2. 深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中,拷贝堆内存中数据,修改其中一个数组中的元素,另一个不会同步修改。。因此,新对象和原对象没有任何关联。

  3. 区别:浅拷贝,修改原数组或新数组,两个数组的值会同步修改 ,深拷贝,修改原数组或新数组,两个数组的值不会同步修改

  4. 本质区别:浅拷贝修改了值,不会新建一个内存地址的对象, 深拷贝 如果修改了值,及时复制了一份新的内存地址,原始地址的值不会被改变

2.数组常用的方法(重点):?

2.1常用方法汇总

?名字 ?

用法

是否修改原数组

push(ele1,ele2,...)

?向数组的末尾添加一个·或更多元素 ?,

?并返回新的长度?

? 修改

pop()

?删除数组中最后一个元素,

? 并返回删除的元素 ?

? 修改

unshift(ele1,ele2,...)

向数组的开头添加一个或者更多元素,

并返回新的长度

? 修改

shiift() ?

删除并返回数组的第一个元素

? 修改

splice()

?从数组中添加或删除元素,

?返回被删除的元素,

? 修改

concat()

?连接两个或更多的数组,

并返回结果 (会生成一个新数组)

不修改

slice(start,end)

?选取数组中的一部分, ? ? ? ? ?

? 并返回新数组 ? ? ? ?

不修改

join() ?

?把数组中所有元素放入一个字符串 ? ? ? ?

不修改
indexof()搜索数组中的元素,并返回它所在的位置。不修改
lastIndexof()搜索数组中的元素,并返回它最后出现的位置。不修改
includes()判断一个数组是否包含一个指定的值,返回值是一个布尔值。不修改
Array.isArray(参数)判断对象是否为数组,返回值是一个布尔值。不修改
sort()对数组的元素进行排序(本质是一个冒泡方法)。修改
reverse()反转数组的元素顺序。修改
arr.forEach(回调函数)数组每个元素都执行一次回调函数。不修改
map()通过指定函数处理数组的每个元素,并返回处理后的数组。不修改
filter()检测数值元素,并返回符合条件所有元素的数组。不修改
findIndex返回符合传入测试(函数)条件的数组元素索引不修改

2.2?补充:

  • ?array.splice(索引号,删几个,添加新的元素,添加新的元素)? 索引号必须写,剩下的可写可不写(如果没有写删除几个,将会从所选位置删到最后,添加的新元素将会添加到当前索引号内容的前面)?
  • concat()可以对一维数组实现深拷贝,复杂的数组还是浅拷贝?
  • slice(start,end)? 里面的两个参数,可正可负,可有可无 形成一个左闭右开的区间,当只有start时,区间为[start,arr.length);? ? ?如果是负值,从后向前数 -1如果两个参数都不要,相当于对元素进行了一次拷贝(深拷贝)?
  • indexof(ele,start)返回元素第一次出现的位置,不存在则返回-1,包含两个参数(元素,起始位置)
  • sort()默认按照asc码来排序?
  • arr.sort(function(a,b){? ?return a-b});表示按照升序的方式来对数组进行排序。
  • arr.sort(function(a,b){? ?return b-a});表示按照降序的方式来对数组进行排序。
  • 回调函数就是没有函数名的元素 function(item,index?){? ? ? ? ? ?}
  • map()当没有返回值时,相当于forEach,有返回值时数组中每个元素做了处理返回
  • findIndex()的效率比indexof()要高

文章来源:https://blog.csdn.net/shan33__/article/details/135483054
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。