第五章 引用类型> Array类型

 

Array中的每一项可以保存不同类型的值。访问数组的值通过下标访问。数组的第一个值的下标是0;第二个是1,以此类推

创建数组的2种基本方式:

1.Array构造函数

var color = new Array();

//也可以省略new操作符
var color = Array();

2.数组字面量

var color = ["red", "yellow", "blue"];
//创建一个包含三个值的数组

var color2 = [];
//创建一个空数组

访问,和设置数组值的方法:

var color = ["red", "blue", "yellow"];

console.log(color[1]);
console.log(color.length);

//blue 数组的下标值从0开始
//2 数组的length属性因为下标从0开始 所以比属性名的数量-1

length属性

通过显式的设置数组的length属性,可以 设置和删除属性

var color = ["red", "blue", "yellow", "leo"];
color.length = 2;
console.log(color[3]);
//undefined

color.length = 4; //设置数组长度为4
color[3] = "two"; //数组的下标从0开始
console.log(color[3]); 
//two 

利用length属性在数组末尾添加新项,数组的最后一项始终是length-1;下一项的位置就是length;每加一项就自动更length属性值。

var colors =["red", "blue", "green"];
colors[colors.length] = "black";
colors[colors.length] = "brown";
console.log(colors[4]);
//brown

检测数组:Array.isArray()用于确定某个值是不是数组。

数组的转换方法:

数组继承的toLocaleString()、toString()、valueOf()以逗号分隔的字符串形式返回数组的每一项。

join():接受一个参数,即用作分隔的字符串。

var colors =["red", "blue", "green"];
console.log(colors.join("||"));

// red||blue||green

数组的 栈方法:

栈:后进先出(Last-in-fisrt-out)的数据结构,新添加的项最早被移除,栈的插入(推入)和移除(弹出)只发生在栈的底部。

push():可以接受任意的参数,把他们逐个添加到数组的末尾。并返回修改后数组的长度。

pop():从数组末尾移除最后一项,减少数组的length值,返回被移除的项。

var colors = ["blue", "yellow", "red"];
colors.push("abc","123"); //推入2个数组项
console.log(colors);
// ["blue", "yellow", "red", "abc", "123"]


var item = colors.pop(); //删除最后一项,把删除的一项保存在item
console.log(colors); 
console.log(item); //被删除的123

//["blue", "yellow", "red", "abc"]
//123

数组的 队列方法:

队列数据结构的访问规则FIFO(First-in-first-out,先进先出);

shift(): 移出数组中的第一项,并返回该项,数组长度减一。

unshift(): 在数组第一个值之前添加任意个项,并返回心数组的长度;

var colors = ["blue", "yellow", "red"];
colors.unshift("abc","123"); //在数字最前添加俩个值
console.log(colors); 
//["abc", "123", "blue", "yellow", "red"]

var item = colors.shift(); //删除最前面的一个值,并保存在item
console.log(colors);
console.log(item);

// ["123", "blue", "yellow", "red"]
// abc

数组的重排序方法:

reverse():用来反转数组的数组;

var a = [1, 2, 3, 4, 5];
a.reverse();
//[5, 4, 3, 2, 1]

sort(): 比较的是字符串的位置。

sort()接受一个比较函数,比较函数接受俩个参数,如果第一个参数一个位于第二个参数之前返回一一个负数,相等返回0,第一个参数位于第二个之后返回一个正数。

function compare(value1, value2) {
if(value1 < value2) { //小于返回-1
return -1; 
}else if(value1 > value2) { // 大于则返回 1
return 1;
}else {
return 0; //等于返回0 数组的升序排列。降序排列反之即可 即第一个参数小于第二参数返回1,大于返回-1
}
}
var values = [0 ,21, 22, 34, 2, 10];
values.sort(compare);
console.log(values);

// [0, 2, 10, 21, 22, 34]

数组的操作方法:

concat()

concat():先创建当前数组的一个副本,接受一个参数,然后将接收到的参数添加到数组末尾。没有参数的时候,只简单的创建副本和返回。

var colors = ["blue", "yellow", "pen"];
var colors2 = colors.concat("red","mood", ["one", "two"]);
console.log(colors);
console.log(colors2);
["blue", "yellow", "pen"]
["blue", "yellow", "pen", "red", "mood", "one", "two"]
//对于心数组color2,变成有open的那组。
//color1继续不变。

slice()

slice():一或多个参数,返回项的起始和结束为止。不包括结束位置的项。一个参数时返回起始位置到数组末尾。

var colors = ["blue", "yellow", "pen"];
var colors2 = colors.concat("red","mood", ["one", "two"]);
console.log(colors2);
console.log(colors2.slice(1,4));
console.log(colors2.slice(2));
console.log(colors2.slice(-2));
// ["blue", "yellow", "pen", "red", "mood", "one", "two"]
// ["yellow", "pen", "red"]
// ["pen", "red", "mood", "one", "two"]
// ["one", "two"] //-1是数组的最后一项, -2代表倒数第二我,依次类推

splice()

3.splice():向数组的中部插入项,始终返回一个数组。数组中包含从原始数组中被删除的元素。三种使用方式:

(1)删除: 删除任意数量的项。指定2个参数,要删除的起始位置,和删除的项数。

(2)插入:向指定位置插入任意数量的项。提供三个参数:起始位置,要删除的项数,要插入的项。

(3)替换:向指定位置插入任意数量的项。插入和删除的项可以不同。三个参数,起始位置,要删除的项数,要插入的项。

var colors = ["blue", "yellow", "pen"];
var colors2 = colors.concat("red","mood", ["one", "two"]);
colors3 = colors2.splice(-2, 2); //从倒数第二项开始,删除2个元素
colors2.splice(2, 3, "ten", "nine"); //从第三个元素开始,删除3个,替换成ten,nine
console.log(colors3);
console.log(colors2)
// ["one", "two"]
// ["blue", "yellow", "ten", "nine"]

数组的位置方法:

indexOf(): 接受俩个参数,要查找的项,和(可选的参数)表示查找起点位置的索引。从头开始,返回要查找的项在数组中的索引。未找到返回-1;查找按照严格相等。

indexlastOf():和indexOf()一样,从数组末尾开始向前查找。

var number = [1, 2, 3, 4, 5, 7, 8, 9, 10];

 console.log(number.indexOf(2));
 console.log(number.lastIndexOf(8));
 console.log(number.lastIndexOf(7));
 // 1
 // 6
 // 5

数组的迭代方法:

概述: 一,大多数方法的第一个参数接受一个函数(即回调函数),对数组的每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用该函数。
回调函数有三个参数: function(数组元素,元素索引,数组本身);

 

forEach()

forEach(function(){ },[thisObject])
第二个参数是可选的。如果有,(改变this的指向。)

forEach(): 遍历,循环数组,为每个元素调用指定的函数。

var data = [1, 2, 3, 4, 5];
var num = 0;
data.forEach(function(value) {
num +=value;
});
console.log(num);
//15

forEach(): 回调函数使用三个参数: function(数组元素,元素索引,数组本身);
 

var data = [1, 2, 3, 4, 5];
 data.forEach(function(v, i, a) {
 3a[i] = v + 1;
 });
 console.log(data);
 // [2, 3, 4, 5, 6]

forEach无法在所有元素都传递给调用函数之前终止遍历。如果要提前终止fofEach方法放再一个try块中,并抛出一个异常。

 function foreach(a, f, t) {
 try{a.forEach(f, t);}
 catch(e) {
if(e === foreach.break) return;
       else throw e;
      }
 }
 foreach.break = new Error("StopIteration");

map()

map(): (映射的意思) 将数组的每个元素传递给指定的回调函数,并返回一个数组。 回调函数的参数和forEach一样

 var a = [1, 2, 3];
 b = a.map(function(x) {
 return x;
 });
 //map类似于forEach 这里回调函数的参数x就是数组元素。
 console.log(b);
 [1, 2, 3]


必须要有返回值。

var data = [1, 2, 3];
console.log(data.map(function(value, index, array){}));

//[undefined, undefined, undefined]

filter()

filter(): (过滤,筛选的意思) 指数组filter后,返回过滤后的新数组;

回调函数用来逻辑判定,该函数返回true,或false;

var a = [1, 2, 3, 4, 5];
smallvalues = a.filter(function(x) {
return x < 3;
});
console.log(smallvalues);
// [1, 2

every()和some()

every()和some() : 数组元素应用回调函数进行逻辑判断,返回true,或fasle;回调函数用于设置判断条件;

every():数组中的所有元素被回调函数判定返回true,才返回true;

var a = [1, 2, 3, 4, 5];
console.log(a.every(function(x){
return x < 10;
}));
// true


some() : 数组元素只要有一个元素返回true就返回true;所有元素都返回false,才返回false;

var a = [1, 2, 3, 4];
console.log(a.some(isNaN));
// false

一旦every()和some() 确认返回false或者true就会停止遍历数组元素。
在空数组上调用every()返回true,some返回false;

reduce() 和reduceRight()

reduce(): 有俩个参数,第一个是执行化简的函数(用某种方法把俩个值组合成一个值),并返回。
第二个(可选),传递给函数的初始值。
如果没有指定第二参数,将使用数组的第一个元素作为初始值。

化简函数的参数:
function(化简操作累计的结果,数组元素,元素的索引,数组本身)

var a = [1, 2, 3, 4, 5];
var sum = a.reduce(function(x,y){
return x+y;
},0);
console.log(sum);
// 15

reduceRight():从数组的右边向前,执行化简函数。

var a = [1, 2, 3];
var sum = a.reduce(function(x,y){
return x + y;
},0);
console.log(sum);
//类似于2 *3 *1 6
原文地址:https://www.cnblogs.com/zhangbaihua/p/5561231.html