1、数组的优化
//1、
var averageTempJan = 31.9;
var averageTempFeb = 35.3;
var averageTempMar = 42.4;
//2、
var averageTemp = [];
averageTemp[0] = 31.9;
averageTemp[1] = 35.3;
averageTemp[2] = 42.4;
//3、
var daysOfWeek = new Array(); //声明并初始化一个数组
var daysOfWeek = new Array(7); //创建一个指定长度的数组
var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday',
'Wednesday', 'Thursday', 'Friday', 'Saturday');
//直接将数组元素作为参数传递给它的构造器
//4、
var daysOfWeek = [];//new并不是创建数组最好的方式使用[]就可以创建数组
var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'];
2、访问元素和迭代数组
求菲波那切数列的前10个数字 菲波那切数列:第一个数字是1 第二个数字是2 从第三项开始 每一项等于前两项之和
function fibo(number){
var fibo=[];
fibo[1]=1;
fibo[2]=2;
for(var i=3;i<number;i++){
fibo[i]=fibo[i-1]+fibo[i-2];//计算数列的值
}
for(var i=1;i<fibo.length;i++){
console.log(fibo[i]);//输出数列的每一个值
}
console.log(fibo[number-1]);//输出数列的最后一个值
}
fibo(10); //计算前多少个数字
3、给数组添加元素
①现有数组的长度为length
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers[numbers.length] = 10;
②使用push方法
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers.push(10,11);
③把元素添加到首位
下面是一个把数组的每一位的值向后挪一位的循环方法
var numbers = [0,1,2,3,4,5,6,7,8,9];
for (var i=numbers.length;i>=0;i--){
numbers[i]=numbers[i-1];
}
console.log(numbers);/*[undefined, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
此时数组0号位为undefined*/
numbers[0]=-1;
console.log(numbers);/*[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
此时数组0号位为-1*/
或者使用unshift方法 可以直接把数值插入数组的首位numbers.unshift(-2,-1);
④删除首个数组元素
使用for循环覆首位元素
var numbers = [0,1,2,3,4,5,6,7,8,9];
for (var i=0;i<numbers.length;i++){
numbers[i]=numbers[i+1];
}
console.log(numbers);//[1, 2, 3, 4, 5, 6, 7, 8, 9, undefined]
删除数组的第一个元素shift方法numbers.shift();
⑤在数组的任意位置添加或删除元素splice()
方法 第一个参数表示索引 第二个参数表示要删除的元素个数(在只需要添加元素时可以为0)后面的参数表示要添加的元素
删除元素
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers.splice(5,3);
console.log(numbers);/*[0, 1, 2, 3, 4, 8, 9]
删除从数组索引5开始的3个元素*/
添加元素
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers.splice(5,0,5,6);
console.log(numbers);/*[0, 1, 2, 3, 4, 5, 6, 5, 6, 7, 8, 9]
在索引为5的位置插入5,6两个数字*/
添加和删除元素
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers.splice(5,2,5,6);
console.log(numbers); /*[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在索引为5的位置删除了两个元素 又添加了两个元素 splice的第二个
参数表示要删除元素的个数 当我们只需要添加元素的时候就把第二个
参数设为0即可 */
4、二维数组
JavaScript只支持一维数组 并不支持矩阵 当时我们可以用数组套数组实现矩阵
比如保存每一天的数据
var averageTemp = [];
averageTemp[0] = [72,75,79,79,81,81];
averageTemp[1] = [81,79,75,75,73,72];
保存每一天每一小时的数据
//day 1
averageTemp[0] = [];
averageTemp[0][0] = 72;
averageTemp[0][1] = 75;
averageTemp[0][2] = 79;
averageTemp[0][3] = 79;
averageTemp[0][4] = 81;
averageTemp[0][5] = 81;
//day 2
averageTemp[1] = [];
averageTemp[1][0] = 81;
averageTemp[1][1] = 79;
averageTemp[1][2] = 75;
averageTemp[1][3] = 75;
averageTemp[1][4] = 73;
averageTemp[1][5] = 72;
迭代二维数组的元素(二维数组的输出)
var averageTemp = [];
averageTemp[0] = [];
averageTemp[0][0] = 72;
averageTemp[0][1] = 75;
averageTemp[0][2] = 79;
averageTemp[0][3] = 79;
averageTemp[0][4] = 81;
averageTemp[0][5] = 81;
averageTemp[1] = [];
averageTemp[1][0] = 81;
averageTemp[1][1] = 79;
averageTemp[1][2] = 75;
averageTemp[1][3] = 75;
averageTemp[1][4] = 73;
averageTemp[1][5] = 72;
function printMatrix(myMatrix) {
for (var i = 0; i < myMatrix.length; i++) {
for (var j = 0; j < myMatrix[i].length; j++) {
console.log(myMatrix[i][j]);
}
}
}
printMatrix(averageTemp);
5、三维数组
var matrix3x3x3 = [];
for (var i = 0; i < 3; i++) {
matrix3x3x3[i] = [];
for (var j = 0; j < 3; j++) {
matrix3x3x3[i][j] = [];
for (var z = 0; z < 3; z++) {
matrix3x3x3[i][j][z] = i + j + z;
}
}
}
for (var i = 0; i < matrix3x3x3.length; i++) {
for (var j = 0; j < matrix3x3x3[i].length; j++) {
for (var z = 0; z < matrix3x3x3[i][j].length; z++) {
console.log(matrix3x3x3[i][j][z]); //输出xyz深度之和
}
}
}
6、数组合并concat()
和...
var a=[1,2,3];
var b=[4,5,6];
var c=a.concat(b);
console.log(c); //[1, 2, 3, 4, 5, 6]
var d=[...a,...b];
console.log(d); //[1, 2, 3, 4, 5, 6]
7、数组迭代 every some forEach map filter reduce
①every。every会迭代数组中的每个元素直到返回false 即返回false迭代结束
var numbers = [4,2,7,6];
var isEven = function (x) {
// 如果x是2的倍数,就返回true
console.log(x); //4 2 7 在x=7时返回false 所以6没有运行
return (x % 2 == 0) ? true : false;
};
numbers.every(isEven);
②some。every会迭代数组中的每个元素直到返回true 即返回true迭代结束
var numbers = [4,2,7,6];
var isEven = function (x) {
// 如果x是2的倍数,就返回true
console.log(x); //4
return (x % 2 == 0) ? true : false;
};
numbers.some(isEven);
③forEach和for循环结果相同 将迭代每一个元素
var numbers = [2,3,4,5];
numbers.forEach(function(x){ //箭头函数写法 numbers.forEach(x => {
console.log((x % 2 == 0)); //true false true false
});
④map 会返回新数组的遍历方法。
var isEven = function (x) {
return (x % 2 == 0);
};
var numbers = [4,2,7,6];
console.log(numbers.map(isEven)); //[true, true, false, true]
⑤filter 会返回新数组的遍历方法
var numbers = [4,2,7,6];
var isEven = function (x) {
return (x % 2 == 0);
};
console.log(numbers.filter(isEven)); //[4, 2, 6] 返回符合条件的新数组
⑥reduce。reduce接收一个函数作为参数 这个函数会返回一个累加值 可以用做数组求和
var numbers = [4,2,7,6];
console.log(numbers.reduce(function(previous, current, index){
return previous + current;
})); //19
⑦for of /es6
var numbers = [4,2,7,6];
for (let n of numbers) {
console.log((n % 2 == 0)); //true true false true
}
⑧entries keys values /es6
var numbers = [4,2];
let entries = numbers.entries(); // 得到键值对的迭代器
console.log(entries.next().value); //[0, 4] - 位置0的值为4
console.log(entries.next().value); //[1, 2] - 位置1的值为2
console.log(entries.next().value); //undefined
var numbers = [4,2];
let aKeys = numbers.keys(); // 得到数组索引的迭代器
console.log(aKeys.next()); //{value: 0, done: false}
console.log(aKeys.next()); //{value: 1, done: false}
console.log(aKeys.next()); //{value: undefined, done: true}
var numbers = [4,2];
let aValues = numbers.values(); // 得到数组值的迭代器
console.log(aValues.next()); //{value: 4, done: false}
console.log(aValues.next()); //{value: 2, done: false}
console.log(aValues.next()); //{value: undefined, done: true}
⑧Array.from 复制数组
var numbers = [4,2,5,7];
let numbers2 = Array.from(numbers);
console.log(numbers2); //[4,2,5,7]
⑨Array.of 根据传入的参数创建一个新数组
let numbers2= Array.of(1,2,3); //等价于 let numbers2=[1,2,3];
console.log(numbers2) //[1,2,3]
⑩fill 填充数组
let numbers=[1,2,3];
numbers.fill(0);
console.log(numbers); //[0,0,0]
8、排序元素
reverse 倒序
sort 从小到大排序 用sort排字符串按首字母的ASCII码大小来排
9、搜索
①indexOf lastIndexOf
indexOf 返回与参数匹配的第一个元素的索引,lastIndexOf 返回与参数匹配的最后一个元素的索引。
不存在的话输出-1
②find findIndex /es6
find findIndex接收一个回调函数 搜索满足回调函数条件的值
find 返回满足条件的第一个值 findIndex 返回这个值的索引
let numbers = [12, 13, 14, 15];
function findu(element) {
return (element % 13 == 0);
}
console.log(numbers.find(findu)); //13
console.log(numbers.findIndex(findu)); //1
③includes /es7
数组中存在某个元素includes返回true 否则返回false
var numbers=[1,2,3]
console.log(numbers.includes(1)); //true
console.log(numbers.includes(5)); //false
在给includes传两个值的时候
var numbers=[1,2,3]
console.log(numbers.includes(1,2)); //false 在索引为2的位置之后不含1
10、转换
toString 把数组中的元素输出为一个字符串
var numbers=[1,2,3,"num"]
console.log(numbers.toString()); //1,2,3,num
join 用不同的分隔符隔开
var numbers=[1,2,3,"num"]
console.log(numbers.join("-")); //1-2-3-num
console.log(numbers.join("")); //123num
最后 与c和java等其他语言不同 JavaScript的数组不是强类型的 因此它可以存储任意类型的数据