数组的基本概念

数组的创建方式

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()的方式创建数组,会存在多种情况具体如下:

  1. 当传入的值是单个数值,则创建一个数组,长度为该值,数组的内容默认为undefined。
  2. 当传入的值为多个数值,则创建的数组长度为参数的个数,值为对应的参数
  3. 当传入的值为字符串,产生的数组长度为参数的个数,值为对应的参数

Array.of方法创建数组方式同数组字面量创建数组的方式。当需要给函数传入Array的构造函数,则可传入Array.of()来确保行为一致

function createArray(arrayCreator,value){
    return arrayCreator(value);
}
let items= createArray(Array.of,value)

Array对象属性

1、length属性

  1. length属性值等于数组最大整数属性名+1,
  2. 它不一定等于数组里属性的个数

举例:

var data =[1,2,3];
data.total=function(){alert("2")}

因为total不是整数,所以数组增加了total属性,不会改变数组的length

2、constructor

返回创建此对象的数组函数的引用。

3、prototype

使您有能力向对象添加属性和方法。

数组字面量:

  1. 数组继承于Array.prototype,继承了大量有用的方法
  2. 拥有length属性(object没有length属性)
  3. 允许数组包含任意混合类型值

数组的基本操作

1、存取数组的元素

单维数组:数组名[下标索引]
多维数组:数组名[外层数组下标[内层元素下标]]
1.png

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、作为缩小基础的初始值
传入参数:

  1. 当前一个prev
  2. 当前值cur
  3. 项的索引index
  4. 数组对象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']


一声蔷薇udVkP
25 声望3 粉丝

未来可期


下一篇 »
git知识全梳理