JavaScript_SA 数组的操作 斐波那契数列

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的数组不是强类型的 因此它可以存储任意类型的数据

发布了75 篇原创文章 · 获赞 0 · 访问量 3388

猜你喜欢

转载自blog.csdn.net/E_ISOLATE/article/details/101541436