JS数组

2017-04-20  本文已影响0人  天边的拾荒者

一、ECMAScript数组的特点

1.ECMAScript数组对数据类型没有要求,数组的每一项都可以存不同的数据
2.数组的长度可以动态增长

二、数组的创建方法

1.new操作符 (调用数组的构造函数)
var colors = new Array();      //创建一个空数组
var colors = new Array(3);     //创建一个长度为3的空数组
var colors = new Array('red','green','blue'); //给数组添加初始值
2.数组字面量创建 (不会调用数组的构造函数)
var colors = [];          //创建一个空数组
var colors = ['red','green','blue']; //给数组添加初始值

三、对象数组

var a = [{},{},{}];//定义一个长度为3的数组,数组的每一项都是一个对象
//为数组的每一项的对象添加属性
a[0] = {
  name : 'Henry',
  age    : 24
};
a[1] = {
  name : 'Tom',
  age    : 22
};
a[2] = {
  name : 'Teddy',
  age    : 26
};
console.log(a);      //[Object,Object,Object]

四、检测数组

使用 instanceof 或 Array.isArray

arr = [1,2,3]
arr instanceof Array  //true
Array.isArray(arr)    //true

五、数组的方法

1.转换方法:toLocaleString toString valueOf join

var colors = ['red','green','blue'];

console.log(colors.toString());      //"red,green,blue"
console.log(colors.valueOf())        //['red','green','blue'];
console.log(colors.join('|'));       //"red|green|blue"
2.栈方法: push pop
var colors = ['red','green','blue'];
console.log(colors.push('black','brown')) ;  //5
console.log(colors);  // ['red','green','blue','black','brown']
var colors = ['red','green','blue'];
console.log(colors.pop());  // "blue"
console.log(colors);        //['red','green']
3.队列方法:shift unshift
var colors = ['red','green','blue'];
console.log(colors.shift());        //"red"
console.log(colors);                //['green','blue']
var colors = ['red','green','blue'];
console.log(colors.unshift('black','brown'));  //5
console.log(colors);  //["black", "brown", "red", "green", "blue"]

实现队列:
unshift->pop 队头进,队尾出
push -> shift 队尾进,队头出
实现堆栈:
push->pop 栈顶在数组末尾
ushift->shift 栈顶在数组开始

4.重排序方法:reverse sort
var colors = ['red','green','blue'];
console.log(colors.reverse());  //["blue", "green", "red"]
//升序比较函数:
var asceCompare =  (a,b) => a< b ?  -1 : (a == b ? 0:1)
//降序比较函数:
var descCompare = (a,b) => a< b ?  1 : (a == b ? 0:-1)
//数字比较
var numbers = [1,9,0,4,39,28,5];
console.log(numbers.sort(asceCompare));  //[0, 1, 4, 5, 9, 28, 39]
console.log(numbers.sort(descCompare))   //[39, 28, 9, 5, 4, 1, 0]
//字符串比较
var colors = ["black", "brown", "red", "green", "blue"];
console.log(colors.sort(asceCompare));  //["black", "blue", "brown", "green", "red"]
console.log(colors.sort(descCompare));  //["red", "green", "brown", "blue", "black"]

5.操作方法 : concat slice splice

var colors =  ['red','green'];
console.log(colors.concat('yellow',['blue',black]); 
//["red", "green", "yellow", "blue", "black"]
console.log(colors);        // ['red','green']
var colors = ["red", "green", "yellow", "blue", "black"];
console.log(colors.slice(2,4));               //["yellow", "blue"]
console.log(colors.slice(2));               //["yellow", "blue", "black"]
//删除:传入2个参数,起始位置,删除项数
var colors = ["red", "green", "black"];
console.log(colors.splice(0,2));    //["red", "green"],删除前两项
console.log(colors);                       //['black']
//插入/替换:传入三个参数,起始位置,删除项数,插入的项
var colors = ["red", "green", "black"];
console.log(colors.splice(1,1,'blue'));//[ "green"],替换第二项
console.log(colors);     //["red", "blue", "black"]
var colors = ["red", "green", "black"];
console.log(colors.splice(1,0,'blue'))//[],在第二项插入一项
console.log(colors);             //["red", "blue", "green", "black"]
6.位置方法:indexOf lastIndexOf
var colors = ["red", "green", "yellow", "blue", "black"];
console.log(colors.indexOf('black'));              //4

(2)lastIndexOf : 从数组末尾查找,输入两个参数:查找的值 起始位置(可选)
返回:查找项的数组下表,没找到则返回-1

var colors = ["red", "green", "yellow", "blue", "black"];
console.log(colors.lastIndexOf('black'));                  //4
7.迭代方法: every filter forEach map some

接受两个参数:
a.在每一项上运行的函数 :传入三个参数, 数组项的值,该项在数组中的位置,和数组本身
b.(可选)运行该函数的作用域对象:影响this的值,默认为全局对象】

var numbers = [7,8,3,4,5];
var everyResult = numbers.every((value,index) => value>index )
console.log(everyResult);                                            //true
var numbers = [1,2,3,4,0];
var everyResult = numbers.every((value,index) => value<index )
console.log(everyResult);               //true
var numbers = [1,2,3,4,5];
var everyResult  = numbers.filter((value) => value>3)
console.log(everyResult);        //[4,5]                              
var numbers = [1,2,3,4,5];
var everyResult  = numbers.forEach((value) => {console.log(value)})
console.log(everyResult);   //undefined
console.log(numbers);    // [1,2,3,4,5]
var numbers = [1,2,3,4,5];
var everyResult  = numbers.map((value) => value*value)
console.log(everyResult);   //[1,4,9,16,25]
console.log(numbers);    // [1,2,3,4,5]

8.归并方法: reduce reduceRight

reduce 从数组的第一项开始遍历到最后
reduceRight 从数组的最后一项向前遍历到数组的第一项
两个参数:每一项上执行的回调函数和归并的初始值(可选),不传入初始值默认为数组的第一项
回调函数的参数:前一个值,当前值,项的索引,数组对象

【函数的返回值会作为第一个参数传给下一项】

var value = [1,2,3,4,5,6];
var sum = value.reduce((pre,cur,index,array)=>{return pre+cur},2);//初始值为2                  
console.log(sum);          //23 数组的和加上初始值
上一篇 下一篇

猜你喜欢

热点阅读