JavaScript之数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript之数组相关的知识,希望对你有一定的参考价值。
数组是用来在单独的变量名中存储数据的,你可以通过方法来操作数组,如:增加数据、删除数据等。
创建/访问数组
通过指定数组名以及索引号码(数组的索引从0开始),你可以访问某个特定的元素,如arr[2]、arr[3]。
1 // 创建数组的方法有两种:1、通过new关键字创建 2、通过字面量创建 2 var arr = new Array(); // 创建一个空数组 3 arr[0] = "Hello"; // 向arr数组中添加元素 4 arr[1] = "world"; // 向arr数组中添加元素 5 6 var arr1 = new Array(3); // 创建一个数组长度的3的数组 7 arr[0] = "My"; // 向arr1数组中添加元素 8 arr[1] = "name"; // 向arr1数组中添加元素 9 arr[3] = "Lily"; // 向arr1数组中添加元素 10 11 var arr2 = new Array(1,2,3,4,5); // 创建数组[1,2,3,4,5] 12 13 var arr3 = []; // 创建一个空数组 14 var arr4 = [1,2,3]; // 创建数组[1,2,3] 15 16 console.log(arr[1]); // 返回world 17 console.log(arr4[2]); // 返回3
数组的属性
1、length - 返回数组的长度,即数组元素的个数
2、prototype - 返回对象类型原型的引用
3、constructor - 返回创建数组的构造函数
1 // 数组的length属性 2 var arr = [1,2,3,4,5]; 3 console.log(arr.length); // 返回5
数组的方法
push() - 在数组末尾添加一个或多个元素,并返回新数组的长度(要改变原来的数组)
pop() - 删除数组末尾的一个元素,并返回该元素(要改变原来的数组)
unshift() - 在数组开头添加一个或多个元素,并返回新数组长度(要改变原来的数组)
shift() - 删除数组开头的一个元素,并返回该元素(要改变原来的数组)
slice() - 截取数组的一个片段,并以数组的形式返回该片段(不改变原数组)
splice() - 在指定位置增加或删除数组元素,只增加元素返回空数组,删除元素则以数组形式返回被删除的元素(要改变原数组)
concat() - 将一个或多个数组连接,并返回连接后新的数组(不改变原数组)
reverse() - 反转数组中的元素(要改变原来的数组)
sort() - 对数组元素排序,会改变原来的数组(默认是升序)
join(separator) - 将数组元素转为以separator隔开的字符串(默认用逗号分隔)
indexOf() - 返回元素的索引,类似字符串的indexOf()方法
1 // 增加元素 push、unshift、splice (改变原数组) 2 var arr = [1,2,3]; 3 arr.push(4,5); // 返回5,arr = [1,2,3,4,5] 4 arr.unshift(-1,0); // 返回7,arr = [-1,0,1,2,3,4,5] 5 // splice(index,count,arrData) index--增加元素的位置(索引);count--从index位置开始删除元素的个数;arrData--从index位置开始增加的元素 6 arr.splice(1,0,6); // 返回[],arr = [-1,6,0,1,2,3,4,5] 7 8 // 删除元素 pop、shift、splice 9 var arr = [1,2,3,4,5,6,7]; 10 arr.pop(); // 返回7,arr = [1,2,3,4,5,6] 11 arr.shift(); // 返回1,arr = [2,3,4,5,6] 12 // splice(index,count) index--删除元素的位置(索引);count--从index位置开始删除元素的个数 13 arr.splice(2,2); // 返回[4,5],arr = [2,3,6] 14 15 // 截取数组 slice (不改变原数组,以数组形式返回截取的部分) 16 // slice(start,[end]) - 截取数组从start开始(含),到end结束(不含);若end省略,则从start开始截取,到数组末尾 17 var arr = [1,2,3,4,5]; 18 arr.slice(1,3); // 返回[2,3],arr = [1,2,3,4,5] 19 arr.slice(3); // 返回[4,5],arr = [1,2,3,4,5] 20 21 // 连接数组 contact(不改变原数组) 22 var arr = [1,2]; 23 var arr1 = [3,4,5]; 24 arr.concat(arr1); // 返回[1,2,3,4,5],arr = [1,2] 25 arr.concat("a","b"); // 返回[1,2,"a","b"],arr = [1,2] 26 27 // 反转数组 reverse (改变原数组) 28 var arr = [1,2,3]; 29 arr.reverse(); // 返回[3,2,1],arr = [3,2,1] 30 31 // 数组排序 sort (改变原数组) 32 // sort不带参数,按升序排列;sort带参数,参数是一个函数 33 var arr = [3,2,6,5,9,1]; 34 arr.sort(); // 返回[1,2,3,5,6,9],arr = [1,2,3,5,6,9] 35 var arr = [9,5,6,8,2]; 36 arr.sort(function(a,b){ 37 return b-a; // 按降序排列 38 // return a-b; // 按升序排列 39 }); // 返回[9,8,6,5,2],arr = [9,8,6,5,2] 40 41 // 数组转字符串 join 默认以逗号分隔(不改变原数组) 42 var arr = [1,2,3,4]; 43 arr.join(); // 返回"1,2,3,4" 44 arr.join(","); // 返回"1,2,3,4" 45 arr.join("-"); // 返回"1-2-3-4"
遍历数组
map() - 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值(不改变原数组)
filter() - 返回一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素(不改变原数组)
some() - 返回true或false,对数组中的每个元素进行检查,直到返回true为止,若检查完整个数组都为false,则返回false;它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略
every() - 返回true或false,对数组中的每个元素进行检查,直到返回false为止,若检查完整个数组都为true,则返回true;它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略
forEach() - 遍历数组中的每一项
for循环遍历数组(不介绍)
1 // map() => array.map(function(value,index,[array]){},[thisValue]) 2 // value -- 当前数组元素,index -- 当前数组元素的索引,array -- 调用map方法的数组,thiiValue -- 执行回调函数时定义的this对象(上下文对象) 3 // 返回每个项的平方 4 var arr = [1,2,3]; 5 arr.map(function(val,index){ 6 return val * val; 7 }); // 返回[1,4,9],arr = [1,2,3] 8 9 // filter() => array.filter(function(value,index,[array]){},[thisValue]) 10 // value -- 当前数组元素,index -- 当前数组元素的索引,array -- 调用filter方法的数组,thiiValue -- 执行回调函数时定义的this对象(上下文对象) 11 // 过滤掉奇数 12 var arr = [1,2,3,4,5,6]; 13 arr.filter(function(val,index){ 14 return val % 2 === 0; 15 }); // 返回[2,4,6],arr = [1,2,3,4,5,6] 16 17 // some() => array.some(function(value,index,[array]){},[thisValue]) 18 // value -- 当前数组元素,index -- 当前数组元素的索引,array -- 调用some方法的数组,thiiValue -- 执行回调函数时定义的this对象(上下文对象) 19 // 检查是否有元素大于5,有则返回true,无则返回false 20 var arr = [2,3,4,6]; 21 arr.some(function(val,index){ 22 retrun val > 5; 23 }); // 返回true 24 25 // every() => array.every(function(value,index,[array]){},[thisValue]) 26 // value -- 当前数组元素,index -- 当前数组元素的索引,array -- 调用every方法的数组,thiiValue -- 执行回调函数时定义的this对象(上下文对象) 27 // 检查是否有元素大于5,有则返回false,无则返回true 28 var arr = [1,2,3,6]; 29 arr.some(function(val,index){ 30 retrun val > 5; 31 }); // 返回false 32 33 // forEach() => array.forEach(function(value,index,[array]){},[thisValue]) 34 // value -- 当前数组元素,index -- 当前数组元素的索引,array -- 调用forEach方法的数组,thiiValue -- 执行回调函数时定义的this对象(上下文对象) 35 // 返回数组中的每一项和索引 36 var arr = [7,9,5]; 37 arr.forEach(function(val,index,arr){ 38 console.log("index:" + index + ",value:" + val); 39 }); 40 // 返回index:0,value:7 41 // index:1,value:9 42 // index:2,value:5
面试题:
1、[1,2,3].map(parseInt)返回值是什么?为什么?
解答:[1,NaN,NaN];由于parseInt需要俩个参数parseInt(string,[radix]),radix为解析时对应的基数(radix介于2~36之间,若radix省略或为0,则以十进制解析,当radix小于2或大于36,则返回NaN),而map传了3参数(value,index,array),对应的基数不合法。
本文仅供自己在平时工作学习时作笔记使用!如有错误请多多指出!!!
以上是关于JavaScript之数组的主要内容,如果未能解决你的问题,请参考以下文章