javaScript 基础知识汇总(七)
1、数组
特点:数组是可以存储有序集合的对象。
声明: let arr = new Array();
let arr=[];
大多数情况下我们使用第二种。
1 let fruits = ["apple","orange","plum"]; 2 fruits[2]="Pear";//对数组的更改 3 4 fruits[3]="Lemon"; 数组元素增加 5 6 let arrLength = arr.lenght; //数组的长度
多维数组
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
alert(matrix[2,1]);//第三行第一个
2、数组的方法
JavaScript中的数组既可以看成栈也可以看成队列
作为队列有以下两种方法:
push 在末端添加一个元素
shift 取出队列最前端的一个元素,整个队列往前移
作为栈有以下两个方法
push 在末端添加一个元素,
pop 在末端取出一个元素
JavaScript 中的数组既可以用作队列,也可以用作栈。它们允许从前端/末端来添加/删除元素。
这在计算机科学中叫做双端队列
1 //JavaScript在数组末端有两种操作方法 2 let arr = ["a"]; 3 alert(a.pop());//移除a并显示a 4 5 arr.push("b"); 6 alert(arr);//b在数组末端添加元素 7 8 9 //在数组前端也有两种方法。 10 let arr = ["a","b"]; 11 alert(arr.shift());//移除a并显示a 12 arr.unshift("c");//在数组的前端添加元素。 13 14 在数组末端的操作比在数组前端的操作速度要快,因为在数组末端操作不需要更改数据其他位置的索引。
splice
删除数组元素,用delete删除,只能删除该元素的值,但是不能删除元素的索引。
而splic 可以对数组进行添加、删除、和插入操作
语法: arr.splic(index[,deleteCount,elem1,...,elemN])
从index开始:删除deleteCount元素并在当前位置插入elem1,..,elemN。最后返回仪删除元素的数组。
1 //删除 2 let arr = ["I", "study", "JavaScript"]; 3 4 arr.splice(1, 1); // from index 1 remove 1 element 5 6 alert( arr ); // ["I", "JavaScript"] 7 8 //删除并替换 9 10 let arr = ["I", "study", "JavaScript", "right", "now"]; 11 12 // remove 3 first elements and replace them with another 13 arr.splice(0, 3, "Let's", "dance"); 14 15 alert( arr ) // now ["Let's", "dance", "right", "now"] 16 17 //将 deleteCount 设置为 0,splice 方法就能够插入元素而不用删除: 18 let arr = ["I", "study", "JavaScript"]; 19 20 // from index 2 21 // delete 0 22 // then insert "complex" and "language" 23 arr.splice(2, 0, "complex", "language"); 24 25 alert( arr ); // "I", "study", "complex", "language", "JavaScript"
slice
语法:arr.slice(start,end) 赋值数组中的元素
1 let str = "test"; 2 let arr = ["t", "e", "s", "t"]; 3 4 alert( str.slice(1, 3) ); // es 5 alert( arr.slice(1, 3) ); // e,s 6 7 alert( str.slice(-2) ); // st 8 alert( arr.slice(-2) ); // s,t
concat
语法:arr.
concat
(
arg1,
arg2...
)
1 let arr = [1,2] 2 3 alert(arr.concat([3,4]));//1,2,3,4
查询数组
indexOf/lastIndexOf和includes
这些方法和字符串的一样。
arr.indexOf(item,from) 从索引from 查询item ,如果找到返回索引,否则返回-1;
arr.lastIndexOf(item,from) 从尾部开始查询
arr.includes(item,from) 从索引from 查询iitem 如果找到返回true;
let arr = [1,0,false]; alert(arr.indexOf(0));//1 alert(arr.indexOf(false));//2 alert(arr.indexOf(null));//-1 alert(arr.includes(1));//true 在这里用的是 === 比较所以如果查询的false ,会精确必须是false,而不是零
find和findIndex
语法:let result = arr.find(function(item,index,array){});
let users =[
{id:1,name:"john"},
{id:2,name:"Pete"},
{id:3,name:"Mary"}
];
let user = users.find(item=>item.id==1);
alert(user.name);//John
filter
和find 类似,但是该方法可以返回多个要素
语法:let result = arr.filter(function(item,index,array){});
let someUsers = users.filter(item=>item.id<3);
alert(someUsers.length);//2
数组转换
map
语法: let result = arr.map(function,index,array){});
对数组中的每一个元素进行判断,最终返回符合结果的数组。
1 let lengths = ["Bilbo", "Gandalf", "Nazgul"].map(item => item.length) 2 alert(lengths); // 5,7,6
soft
此方法默认是按照字符串排序的,如果不传参数,返回值不一定是自己想要的
比较函数可以返回任何数字
1 2 let arr = [ 1, 2, 15 ]; 3 4 arr.sort(function(a, b) { return a - b; }); 5 6 alert(arr); // 1, 2, 15
更短的代码
1 rr.sort( (a, b) => a - b );
reverse
颠倒数组中元素的顺序
1 let arr = [1, 2, 3, 4, 5]; 2 arr.reverse(); 3 4 alert( arr ); // 5,4,3,2,1
split 和join
分割和合并元素
1 //逗号分割 2 let names = 'Bilbo, Gandalf, Nazgul'; 3 4 let arr = names.split(', '); 5 6 for (let name of arr) { 7 alert( `A message to ${name}.` ); // A message to Bilbo (and other names) 8 } 9 //将一个数组用“;”连接成字符串 10 let arr = ['Bilbo', 'Gandalf', 'Nazgul']; 11 12 let str = arr.join(';'); 13 14 alert( str ); // Bilbo;Gandalf;Nazgul
reduce 和reduceRight
语法:let
value =
arr.
reduce
(
function
(
previousValue
,
item,
index,
arr)
{
// ...
}
,
initial)
;
previousValue
— 是前一个函数调用的结果,第一次调用是初始化。
1 let arr = [1, 2, 3, 4, 5]; 2 3 let result = arr.reduce((sum, current) => sum + current, 0); 4 5 alert(result); // 15
如果不初始化初始值则默认使用第一个元素作为初始值
1 let arr = [1, 2, 3, 4, 5]; 2 3 // 删除初始值 4 let result = arr.reduce((sum, current) => sum + current); 5 6 alert( result ); // 15
arr.reduceRight 也一样,但是遍历是从右到左。
迭代:forEach
语法:arr.
forEach
(
function
(
item
,
index,
array)
{
// ... do something with item
}
)
;
// 为每个元素调用 alert
1 ["Bilbo", "Gandalf", "Nazgul"].forEach(alert);