一、数组
1、创建和初始化数组
var arr = new Array(); //新建一个空数组 var arr1 = new Array(7); //新建一个长度为7的空数组 var arr2 = new Array('1','2','3'); //新建一个包含了1,2,3三项的数组 var arr3 = []; //新建一个空数组 var arr4 = ['1','2','3'] //新建一个包含了1,2,3三项的数组
访问数组
console.log(arr4[1])//通过使用中括号传递相应的位置,就可以看到相应数组的元素值。注意这里面传递的是下标,数组的下标是从0开始而不是1,所以arr4[1]的结果是2而不是1
2、添加元素
2.1、添加元素到数组的末尾
arr.push(1); //添加1到数组arr中,此时arr=[1] arr.push(2,3,4) //添加2,3,4到数组arr中,此次arr=[1,2,3,4]
2.2、添加元素到数组的首位
arr.unshift(0) //添加0到数组arr中,此时arr=[0,1,2,3,4] arr.unshift(-2,-1) //添加-2,-1到数组中,此时arr=[-2,-1,0,1,2,3,4]
3、删除元素
3.1、删除数组结尾的元素
arr.pop() //此时arr=[-2,-1,0,1,2,3]
3.2、删除数组开头的元素
arr.shift() //此时arr=[-1,0,1,2,3]
3.3、在任意位置添加或删除元素
//splice(index,deletnumber,addelement)接受三个参数,第一个是数组的下标位置,第二个是删除元素的个数,第三个是添加的元素 arr.splice(2,2)//此时arr=[-1,0,3] arr.splice(2,0,1,2)//此时arr=[-1,0,1,2,3]
4、二维和多维数组
//JavaScript只支持一维数组,不支持矩阵(二维数组),我们可以用数组嵌套的方式来实现一维或多维数组 var arr = []; arr[0] = [1,2,3,4,5] arr[1] = [6,7,8,9,10] //或以下写法 arr[0] = []; arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[0][3] = 4; arr[1] = []; arr[1][0] = 5; arr[1][1] = 6; arr[1][2] = 7; arr[1][3] = 8;
5、数组的其他方法
5.1、合并数组
var arr = []; var arr1 = [1,2,3]; var arr2 = [4,5,6]; // concat方法可以向一个数组传递数组、对象或是元素。数组会按照该方法传入的参数顺序连接指定数组。 arr = arr.concat(arr1,arr2); //arr=[1,2,3,4,5,6] console.log(arr);
5.2、迭代数组的元素
5.2.1、every方法迭代
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; //every方法会迭代数组中的每个元素,直到返回false。 var isEven = function (x) { console.log(x) return (x < 8) ? true : false; } arr.every(isEven)
5.2.2、some方式迭代
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; //every方法会迭代数组中的每个元素,直到返回true。 var isEven = function (x) { console.log(x) return (x < 8) ? true : false; } arr.some(isEven)
5.2.3、forEach方法迭代
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; //迭代整个数组,返回各种判断的结果 arr.forEach(function (x) { console.log(x > 7) }) //箭头函数简化: arr.forEach(x => { console.log(x > 7) })
5.2.4、map和filter方法
1)map
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; var isEven = function (x) { console.log(x) return (x < 8) ? true : false; } var arrMap = arr.map(isEven); //arrMap:[true, true, true, true, true, true, true, true, false, false]
2)filter
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; var isEven = function (x) { console.log(x) return (x < 8) ? true : false; } var arrMap = arr.filter(isEven); console.log(arrMap) //arrMap:[0, 1, 2, 3, 4, 5, 6, 7],它返回的新数组由使函数返回true的元素组
5.2.5、reduce方法
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; //reduce方法接收一个函数作为参数,这个函数有四个参数:previousValue、currentValue、index和array。这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后会返回这个累加器。 var num = arr.reduce(function(previous, current, index){ return previous + current; }); //num = 45
5.2.6、for...of循环迭代
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; for (let n of num) { console.log((n % 2 == 0) ? 'even' : 'odd') }
5.2.7、ES6新迭代器(@@iterator)
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let n = num[Symbol.iterator](); for (let i = 0; i < num.length; i++) { console.log(n.next().value); }
不断调用迭代器next()方法,就能依次得到数组中的值。数组所有值都迭代完之后,n.next().value会返回undefined。
5.2.7.1、entries、keys和values方法
1)entries方法返回包含键值对的@@iterator。
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let n = num.entries(); //得到键值对的迭代器 for (let i = 0; i < num.length; i++) { console.log(n.next().value); //例如:[0,1]、[1,2]... }
num数组中都是数字,key是数组中的位置,value是保存在数组索引的值。
2)keys方法返回包含数组索引的@@iterator。
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let n = num.keys(); //得到数组索引的迭代器 for (let i = 0; i < num.length; i++) { console.log(n.next()); //例如:{value:1,done:false}、{value:2,done:false}... }
keys方法会返回numbers数组的索引。一旦没有可迭代的值,aKeys.next()就会返回一个value属性为undefined,done属性为true的对象。如果done属性的值为false,就意味着还
有可迭代的值。
3)value方法返回的@@iterator则包含数组的值。代码为@@iterator介绍时的代码。
5.2.8、from方法
Array.from方法根据已有的数组创建一个新数组。
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let newNum = Array.from(num, x => (x % 2 == 0)); let newNums = Array.from(num); console.log(newNums); //[1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(newNum); //[false, true, false, true, false, true, false, true, false]
5.2.9、Array.of方法
Array.of方法根据传入的参数创建一个新数组。
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let n1 = Array.of(1); // [1] let n2 = Array.of(...num) //[1, 2, 3, 4, 5, 6, 7, 8, 9],展开操作符(...)会把num数组里的值都展开成参数。
5.2.10、fill方法
fill方法用静态值填充数组。
let num1 = new Array(6); num1.fill(1); // [1, 1, 1, 1, 1, 1] num1.fill(2,1); //[1, 2, 2, 2, 2, 2],从1开始所有的值为2 num1.fill(1,3,5); //[1, 2, 2, 1, 1, 2],把1填充到数组索引3到5的位置(不包括5) let num2 = Array(5).fill(1); //可以复合使用
5.2.11、copyWithin方法
copyWIthin方法复制数组中的一系列元素到同一数组指定的起始位置。
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; num.copyWithin(0,4) //[5, 6, 7, 8, 9, 6, 7, 8, 9],从位置4开始的值付给0以后的值 num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; num.copyWithin(1,3,5) //[1, 4, 5, 4, 5, 6, 7, 8, 9],把位置3和4(不包含5)的值复制到位置1和2
6、数组排序
6.0、翻转数组
var arr = [1,2,3,4,5,6,7,8,9]; console.log(arr.reverse()); //[9, 8, 7, 6, 5, 4, 3, 2, 1]
6.1、自定义排序
var ifm = [{ name: 'a', age: 30 }, { name: 'b', age: 15 }, { name: 'c', age: 20 }]; function count(a,b) { if(a.age<b.age){ return -1 }else if (a.age>b.age){ return 1 } return 0 } console.log(ifm.sort(count)); // {name: "b", age: 15}{name: "c", age: 20}{name: "a", age: 30}
6.2、字符串排序
var arr = ['A','J','B','b','a','j']; console.log(arr.sort()) // ["A", "B", "J", "a", "b", "j"],这个方法是根据ASCII值进行比较 function count(a,b) { if(a.toLowerCase() < b.toLowerCase()){ return -1 }else if(a.toLowerCase() > b.toLowerCase()){ return 1 } return 0 } console.log(arr.sort(count)) //["A", "a", "B", "b", "J", "j"] var arrs = ['ab','ac','aa']; function count1(a,b) { return a.localeCompare(b) } console.log(arrs.sort(count1)) // ["aa", "ab", "ac"]
7、搜索
7.1、indexOf()和lastIndexOf()
indexOf返回与参数匹配的第一个元素的索引,lastIndexOf返回与参数匹配的最后一个元素的索引。
var arr = [1,2,3,4,5,6,7,8,9,8,7,6]; console.log(arr.indexOf(6)); //5 console.log(arr.lastIndexOf(6)); //11 //找不到元素返回-1
7.2、find和findIndex
find和findIndex方法接受一个回调函数,搜索一个满足回调函数条件的值。
var arr = [1,2,3,4,5,6,7,8,9,8,7,6]; function count(ele,i,arr) { return (ele > 7)? true: false; } console.log(arr.find(count)); //8,返回第一个满足条件的值 console.log(arr.findIndex(count)); //7,返回第一个满足条件值的下标
7.3、includes方法
如果数组存在某个元素,includes方法会返回true,否则返回false。
var arr = [1,2,3,4,5,6,7,8,9,8,7,6]; console.log(arr.includes(7)); //true console.log(arr.includes(6,7)); //true,从下标6的位置开始搜索
8、输出数组为字符串,toString和join
var arr = [1,2,3,4,5,6,7,8,9,8,7,6]; console.log(arr.toString()); //1,2,3,4,5,6,7,8,9,8,7,6 console.log(arr.join('&')); //1&2&3&4&5&6&7&8&9&8&7&6,以&号做分割的字符串。

浙公网安备 33010602011771号