数组的基本概念
数组的创建方式
1.空数组
//方式一
var arr =new Array();
//方式二:
var d = []
2.指定长度的数组
var arr = new Array(size)
3.多维数组
var a= new Array([数组序列1],[数组序列2],[数组序列N])
4.单维数组
new Array(ele1,ele2,...,elen)
参数 element ..., elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元素就会被初始化为这些值。它的 length 字段也会被设置为参数的个数
5.ES6 改进数组功能- Array.of()创建数组方法
let item = Array.of(2)
console.log(item.length) // 1
console.log(item[0])//2
讲解:这创建一个数组长度为1,数组第一个索引的数组值为2
该方法可以避免数组构造方式创建数组的奇葩问题
例子如下:
// 情况一
var item = new Array(2)
console.log(item.length) // 2
console.log(item[0])//undefined
console.log(item[1])//undefined
//情况二
var item = new Array(1,3)
console.log(item.length) // 2
console.log(item[0])//1
console.log(item[1])//3
//情况三
var item = new Array("3")
console.log(item.length) // 1
console.log(item[0])//"3"
用new Array()的方式创建数组,会存在多种情况具体如下:
- 当传入的值是单个数值,则创建一个数组,长度为该值,数组的内容默认为undefined。
- 当传入的值为多个数值,则创建的数组长度为参数的个数,值为对应的参数
- 当传入的值为字符串,产生的数组长度为参数的个数,值为对应的参数
Array.of方法创建数组方式同数组字面量创建数组的方式。当需要给函数传入Array的构造函数,则可传入Array.of()来确保行为一致
function createArray(arrayCreator,value){
return arrayCreator(value);
}
let items= createArray(Array.of,value)
Array对象属性
1、length属性
- length属性值等于数组最大整数属性名+1,
- 它不一定等于数组里属性的个数
举例:
var data =[1,2,3];
data.total=function(){alert("2")}
因为total不是整数,所以数组增加了total属性,不会改变数组的length
2、constructor
返回创建此对象的数组函数的引用。
3、prototype
使您有能力向对象添加属性和方法。
数组字面量:
- 数组继承于Array.prototype,继承了大量有用的方法
- 拥有length属性(object没有length属性)
- 允许数组包含任意混合类型值
数组的基本操作
1、存取数组的元素
单维数组:数组名[下标索引]
多维数组:数组名[外层数组下标[内层元素下标]]
2、增加数组
使用“[]”运算符指定一个新下标
3、删除数组
delete数组名[下标],由于数组也是对象,这样操作会在数组中留空洞,因为排在被删除元素后的元素保留最初的属性(不推荐使用)
使用splice删除数组中元素可以不留空洞会重新排序
4、遍历数组
for(var 数组元素变量 in数组)
缺点:
1、无法保证属性的顺序
2、会得到原型链中属性
for遍历
数组的方法
1、增加
push()
向数组的末尾添加一个或更多元素,并返回新的长度
unshift()
向数组的开头添加一个或更多元素,并返回新的长度。
concat()
连接两个或更多的数组,并返回结果。(不改变原数组)
2、删除
pop()
删除并返回数组的最后一个元素
shift()
删除并返回数组的第一个元素
此方法更改数组的长度。 shift 方法移除索引为 0 的元素(即第一个元素),并返回被移除的元素,其他元素的索引值随之减 1。如果 length 属性的值为 0 (长度为 0),则返回 undefined
splice()
传3个参数,第一表示开始移除的位置,第二个参数表示移除多少个,第三个参数表示要替换的值
3、子数组
slice()
从某个已有的数组返回选定的元素(浅复制)
参数部分:
slice(start,end)包含开始,不包含结束
slice(start)从start的位置开始切到结束位置
注意:这个给方法不会改变原本的数组
splice()
注意:方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
参数部分:
1、指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
2、(可选)整数,表示要移除的数组元素的个数
3、(可选)要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。
4、数组的排序
reverse()
颠倒数组中元素的顺序。
改变原本数组
sort()
对数组的元素进行排序
5、数组的转换
toSource()
返回该对象的源代码。
toString()
把数组转换为字符串,并返回结果。
toLocaleString()
把数组转换为本地数组,并返回结果。
join()
把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
valueOf()
返回数组对象的原始值
6、位置方法
indexOf
从数组的起始位置开始查找
lastIndexOf
从数组的结束位置开始查找
参数部分:
1、要查找的项
表示查找起始位置的索引
7、迭代方法
every
如果该函数的对每一项都返回true,则返回true
filter
返回值为true的所以数组成员
forEach
无返回值
map
返回每次函数调用的结果数组
some
有任意一项返回true,则返回true
参数:
接收参数:1、要在每一项上运行的函数2、运行该函数的作用域对象
传入参数:1、数组项的值 item 2、该项在数组中的位置index 3、数组对象本身array
8、缩小方法
reduce
从数组起始位置开始遍历
例子:
reduceRight
从数组末尾开始遍历
参数:
接收参数:1、每一项上调用的函数2、作为缩小基础的初始值
传入参数:
- 当前一个prev
- 当前值cur
- 项的索引index
- 数组对象array
9、ES6 Array.from()方法
作用:将类数组或迭代器转为数组
参数一:类数组或迭代器
function doSomething(){
var args = Array.from(arguments)
}
映射转换->将映射函数作为第二个参数
function translate(){
return Array.from(arguments,(value)=>value+1)
}
let numbers = translate(1,2,3)
console.log(numbers)//1,2,3,
映射函数的this值->第三个参数传入
let helper = {
diff:1,
add(val){
return val+this.diff
}
function translate(){
return Array.from(arguments,helper.add,helper)
}
let numbers = translate(1,2,3)
console.log(numbers)//2,3,4
容易混淆的地方
1. 不知何时用数组何时用对象:
属性名小而连续的整数用数组否则用对象
2. typeOf 运算符数组会输出'object',推荐使用以下方式判断类型
Object.prototype.toString.apply(value)===['object Array']
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。