Array 基础

前端小菜从今天开始记录js学习收获,记录内容来自红宝书
首先带来的是array的理解

  • array的定义
  • array的检测
  • array常用方法
    1. 栈方法
    2. 队列方法
    3. 排序
    4. 元素操作
    5. 位置查找
    6. 迭代方法
    7. 归并方法

array的定义

关于数组定义主要有两种方式:构造函数法和字面量法多数人钟情于后者,简单、粗暴

构造函数法

var arr =new Array();

当构造函数法 new Array(n),只有一个参数时,若参数为数字即生成一个length为n的数组,否则便生成只有 一个元素 n的数组

字面量法

var arr =[];

检测数组

Array.isArray()检测某个值是否为数组

接下来是对于数组的一些操作主要涉及到push、pop、shift、unshift、sort、reverse等方法

栈方法(后进先出)

js作为一个动态的脚本语言,可以通过自己的方式去模拟其他语言的功能,从而造就了它的强大

js通过push和pop来模拟了栈的行为

push在数组末尾添加元素,返回数组长度

var arr =['john'];
arr.push('jack'); //return 2
console.log(arr) //'john','jack'

pop实现从数组末尾移除最后一项

arr.pop() //return jack

队列方法(先进先出)

js通过shift和push可以模拟队列行为
push向数组末尾推入一个元素,shift从数组前端移除一个元素

shift移除数组中第一个元素,返回删除元素

var arr =['jack','john'];
var newArr = arr.shift(); //jack
console.log(arr) //john

与shift对应的还有unshift, unshift是向数组的前端插入任意项

arr.unshift(1,2,3)
console.log(arr) //1,2,3,'john'

排序

数组的排序方法有reversesort

reverse()方法是反转数组顺序

var arr =[1,2,3,4]
arr.reverse() // arr=>4,3,2,1

sort()实现函数排序功能(默认升序排列),在比较之前会调用每个元素的toString()方法,然后进行比较,所以排序结果会与我们的预期(升序或降序)有所出入
为了达到预期效果偶们需要给sort传递一个compare方法

function compare(value1,value2){
    if(value1<value2>{
        return -1;
    }else if (value1>value2){
        reutrn 1;
    }else{
        return 0;
    }

}

var arr =[1,4,2,6,5]
arr.sort(compare)
console.log(arr) //1,2,4,5,6

当然也有一个简化版比较函数(适应于数值类型和typeOf返回数值类型的对象类型)

function compare(value1,value2){
return value1 -value2; //升序
}

操作方法

concat()可以基础当前数组所有项创建一个新数组

var arr =[1,2,3];
var arr1 =arr.concat('jack','hello');

arr //1,2,3
arr1 //1,2,3,'john','hello'

slice()基于当前数组的一个或多个项创建一个新数组,slice()可以接受一个或两个参数,表示返回项的起始和结束位置
*只有一个参数时返回指定位置开始到数组末尾的所有项,无参数时默认从0开始
*两个参数时,返回起始位置到结束位置之间(不包含结束位置)的项

var arr =[1,2,3,4,5]
var arr1 =arr.slice() //1,2,3,4,5
arr.slice(1) //2,3,4,5
arr.silce(1,3) //2,3

splice()可以通过参数控制实现对数组的元素的直接(对原数组操作)删除,插入,替换
*删除--指定两个参数,第一项位置和要删除的项数,返回删除项

var arr =[1,2,3,4,5]
arr.splice(1,2) //2,3
arr //1,4,5

*插入--提供三个参数:起始位置,0(要删除个数),要插入项

var arr =[1,2,3,4,5]
arr.splice(1,0,'jack','john')
arr // 1,'jack','john',2,3,4,5

*替换-类似于对插入方法的扩展,只是把插入方法的第二个参数变成非零,即可实现插入的效果

位置方法(indexOf/lastIndexOf)

都接受两个参数:要查找的项和查找起点索引,当省略第二个参数即取默认值0,内部执行(全等)===操作,所以匹配项必须严格相等,查找不到目标元素返回-1,

var arr =[1,2,34,4,5,7]
arr.indexOf(34) //2
arr.indiexOf(34,3) //-1

迭代方法

:给定函数接受三个参数:元素值,索引,当前数组对象
*every()对对数组每一元素运行给定函数,都为true则返回true
*some()对数组每一元素执行给定函数,任一项返回true,则返回true
*filter()对数组每一元素执行给定函数,返回给定函数返回true的值,组成的新数组
*forEach()对数组每一元素执行给定函数,类似于for
*map()对数组每一元素运行给定函数,返回每次调用结果组成的数组

var arr =[1,2,3]

every()

var result =arr.every(function(item,index,array){
return item>1
})
result //false

filter()

var newArr = arr.filter(function(item,index,aarray){
return item>1
})
newArr //2,3

map()

var newArr =arr.map(function(ietm,index){
return item*2;
})
newArr //2,4,6

归并方法

*reduce
*reduceRight
两者区别在于从哪端开始遍历数组

reduce()接受四个参数:前一个值,当前值,索引数组对象

var arr=[1,2,3]
var newArr = arr.reduce(function(prev,cur,index,array){
retnrn prev + cur
});
newArr //6
函数的返回值会作为是一个参数(prev),传递给下一项

END...

posted @ 2016-03-15 13:14  V_JACK  阅读(211)  评论(0编辑  收藏  举报