JS-数组

数组

1.数组的概述

js中的数组是可以存放任意数据类型值的集合,数组的元素可以是任意数据类型,数组的长度可以动态调整。

2.数组的创建

  • 字面量方式
    由一对中括号“[ ]”包裹数组的元素,元素之间用逗号 “,” 隔开。
//元素可以是任意的数据类型
 var arr = [123,"hello",function(){},null];
  • 构造函数方式
    通过Array() 构造函数来创建数组
/*如果传入的参数是一个number类型的整数,则代表创建的数组长度,如果是小数则会报错,
如果是其他类型的则会当成元素存进去。*/
var arr = new Array();
//创建一个长度为6的数组
var arr = new Array(6)
/*创建一个包含三个元素,长度为3的数组[ 3, 5, 'hello' ]。
(注:如果是字符串的参数,记得加引号)*/
var arr = new Array(3,4,'hello')

3.数组的访问

  • 访问数组元素
    数组变量名[索引],索引值从0开始,到数组长度length-1.
//如果索引值大于数组长度或者为负数,返回undefined。
var arr = [123,'hello'];
arr[0];	//访问数组的第一个元素,返回值为123
arr[3];	//undefined
//可以通过索引改变数组元素
arr[0] = 456;	//把数组第一个元素123改成456
//如果索引大于数组长度,则会在指定的位置增加新的元素,并且数组长度变成索引值+1
arr[4] = 'world';	//[ 456, 'hello', <2 empty items>, 'world' ],数组长度变成5

4.数组API

4.1数组序列化

toString() 以字符串形式返回数组元素,并用逗号分隔
join() 以字符串形式返回数组元素,并用括号里指定的字符串分隔(括号里的分隔字符串要加引号)

4.2构造函数的方法
  • Array.isArray()
    判断某个变量是否是一个数组对象

  • Array.from()
    从类数组对象或者可迭代对象中创建一个新的数组实例。即把传进括号里的对象分解成单独的字符串,然后形成一个新的数组。

//[ '1', '2', '3', '4', '5', '6' ]
 var Arr = Array.from("123456");
  • Array.of()

根据一组参数来创建新的数组实例,支持任意的参数数量和类型。

Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。 Array.of()方法基本上可以用来替代Array()或new Array().

4.3栈与队列方法
  • Array.prototype.push()
    向数组的末尾添加一个或多个元素,返回值是数组的新长度
 array.push(item1, item2, ..., itemX)
  • Array.prototype.pop()
    删除数组的最后一个元素,返回值是被删除的元素。
array.pop()
  • Array.prototype.shift()
    删除数组的第一个元素,返回值是第一个元素的值。
array.shift();
  • Array.prototype.unshift()
    向数组的开头添加一个或多个元素,返回值是数组的新长度。
 array.unshift(item1,item2, ..., itemX)

注:以上四种方法都会改变原数组的长度。

排序方法
  • Array.prototype.reverse()
    用于颠倒数组中元素的顺序,返回值是颠倒后的数组。
 var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();//[ 'Mango', 'Apple', 'Orange', 'Banana' ]
  • Array.prototype.sort()
    用于对数组元素进行排序,默认按字母升序(Ascall编码)。如果是数字,则默认只比较第一个数字的大小进行升序。
 array.sort(sortfunction)

如果想要进行真正的数字排序,则需要自己定义一个函数作为参数进行调用。
数字升序:

 var arr = [5,80,60,9,10];
 arr.sort(function(a,b){
 	return a-b;
 })
 //[ 5, 9, 10, 60, 80 ]

降序的话则把函数返回值改成 b-a就可以了。
因为无论是a>b还是b>a,return a-b 总能得到升序的结果,而 return b-a 总能得到降序的结果。
注:以上两种排序方式都会改变原数组,而不会创建新的数组副本。

4.5 操作方法
  • Array.prototype.concat()
    用于连接两个或者多个数组。
    说白了,concat()方法就是在原数组的后面拼接上传入的参数。
array1.concat(array2,array3,...,arrayX)

参数是必需的,可以是数组对象,也可以是具体的值。返回值是一个新的数组。

  • Array.prototype.slice()
    用于从数组中返回选定的元素:[start,end)。
array.slice(start, end)

start:可选。开始选取的位置的索引值,如果为负数,则表示原数组的倒数第几个元素开始。
end:可选。结束选取的位置的索引值。如果没有该参数,则表示截取从start到数组结束的所有元素。如果为负数,则表示原数组的倒数第几个元素结束。
返回值:一个新的数组。包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

  • Array.prototype.splice()
    splice() 方法用于添加或删除数组中的元素。
    注意: 这种方法会改变原始数组。
array.splice(index,howmany,item1,.....,itemX)

index:必需。在某个位置进行 添加/删除 的索引值,必须是数字。
howmany:可选。删除元素的个数,必须是数字。如果为0,则表示不删除元素;如果未规定,则表示删除从index开始到原数组末尾的所有元素。
item1, …, itemX:可选。要添加到数组的新元素。
返回值:返回由被删除的元素组成的新数组。如果没有被删除的元素,则返回一个空数组。
添加新的元素:

var Naruto = ['鸣人','佐助','卡卡西','鼬','柱间']
//从数组索引位置 2 开始,不删除元素,添加两个新的元素'带土','琳'
Naruto.splice(2,0,'带土','琳')
console.log(Naruto);//[ '鸣人', '佐助', '带土', '琳', '卡卡西', '鼬', '柱间' ]

移除数组的第三个元素,并在数组第三个位置添加新元素:

var Naruto = ['鸣人','佐助','卡卡西','鼬','柱间']
//在数组的第三个位置删除一个元素,并添加两个新的元素
Naruto.splice(2,1,'带土','琳')
console.log(Naruto);//[ '鸣人', '佐助', '带土', '琳', '鼬', '柱间' ]

从第三个位置开始删除数组后的两个元素:

var Naruto = ['鸣人','佐助','卡卡西','鼬','柱间']
Naruto.splice(2,2)
console.log(Naruto);[ '鸣人', '佐助', '柱间' ]
4.6 位置方法
  • Array.prototype.indexOf()
    从start处开始检索目标元素item的位置,没有指定start参数时则从头开始检索。
    返回值:目标元素在数组中的位置,没有检索到则返回-1
 array.indexOf(item,start)
  • Array.prototype.lastIndexOf()
    此方法用于返回目标元素在数组中最后出现的位置。
    如果有参数start,则从start处,向着数组开头检索;如果没有,则从尾到头开始检索。
    返回值:数组中该元素最后一次出现的索引,如未找到返回-1。
array.lastIndexOf(item,start)
4.7 迭代方法
  • Array.prototype.every()
    every()方法通过指定的函数检测数组中的所有元素,只有所有元素都符合条件才会返回true,否则返回false。
    :此方法不会改变原始数组,不会对空数组进行检测。
array.every(function(currentValue,index,arr){
	//函数代码块
}, thisValue)

function(currentValue,index,arr):必需。自己定义的函数。
thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。 如果省略了 thisValue ,“this” 的值为 “undefined”。
currentValue:必需。当前数组元素的值。
index:可选。当前元素的索引值。
arr:可选。当前元素属于的数组对象。

  • Array.prototype.some()
    some()方法用于检测数组中是否存在满足指定条件的元素。
    此方法会依次检测每个数组,但只要有一个元素满足条件,则返回true,并停止检测,否则返回false。
    :不会对空数组检测,不改变原数组。
array.some(function(currentValue,index,arr),thisValue)
  • Array.prototype.filter()
    filter()方法用于把符合条件的元素组成一个新的数组。
    :不检测空数组,不改变原数组。
array.filter(function(currentValue,index,arr), thisValue)

返回值:符合条件的元素组成的数组。如果没有符合条件的元素则返回空数组。

  • Array.prototype.map()
    map()方法,把元素经过函数处理过后的值(eg:函数把元素开平方,求和),组成新的数组。
    :不检测空数组,不改变原数组。
array.map(function(currentValue,index,arr), thisValue)

返回值:一个新的数组。

  • Array.prototype.forEach()
    forEach()方法可以遍历数组的每一个元素,然后把元素传递给回调函数。
    :forEach() 对于空数组是不会执行回调函数的。
array.forEach(function(currentValue, index, arr), thisValue)

返回值:undefined
forEach()与map()差不多,但是前者是没有返回值的

- 不改变原数组的方法

join()—把数组的所有元素放入一个字符串。
toString()—把数组转换为字符串,并返回结果。
concat()—连接两个或更多的数组,并返回结果。
every()—检测数组元素的每个元素是否都符合条件。
some()—检测数组元素中是否有元素符合指定条件。
filter()—检测数组元素,并返回符合条件所有元素的数组。
indexOf()—搜索数组中的元素,并返回它所在的位置。
lastIndexOf()—返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
map()—通过指定函数处理数组的每个元素,并返回处理后的数组。
slice()—选取数组的的一部分,并返回一个新数组。
valueOf()—返回数组对象的原始值。

- 改变原数组的方法

pop()—删除数组的最后一个元素并返回删除的元素。
push()—向数组的末尾添加一个或更多元素,并返回新的长度。
shift()—删除并返回数组的第一个元素。
unshift()—向数组的开头添加一个或更多元素,并返回新的长度。
reverse()—反转数组的元素顺序。
sort()—对数组的元素进行排序。
splice()—用于插入、删除或替换数组的元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值