美文网首页
JS数据结构与算法之基础--数组的各种操作方法

JS数据结构与算法之基础--数组的各种操作方法

作者: aermin | 来源:发表于2017-12-21 10:37 被阅读0次

    tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易理解的方式写好每一篇博客,大家一起学习交流😄。

    先来个经典数组操作题:

    求斐波那契数列的前20 个数字。已知斐波那契数列中第一个数字是1 ,
    第二个是2 ,从第三项开始,每一项都等于前两项之和

    var fibonacci = []; 
    fibonacci[0] = 1;
    fibonacci[1] = 2; 
    for(var i = 2; i < 20; i++){
    fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; 
    }
    console.log(fibonacci); //[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]
    

    数组增删

    push unshift shift pop

    var numbers = [0,1,2,3,4,5,6,7,8,9];
    numbers[numbers.length] = 10; //插入尾
    numbers.push(11);//插入尾
    numbers.push(12, 13); //插入尾
    numbers.unshift(-2); //插入头
    numbers.unshift(-4, -3);//插入头
    numbers.shift();//删除第一个数
    numbers.pop(); // 删除最后一个数
    console.log(numbers);  //[-3, -2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,]
    

    通过push和pop方法,就能用数组来模拟栈
    通过shift和unshift方法,就能用数组模拟基本的队列数据结构

    • 二维数组
    var averageTemp = [];
    averageTemp[0] = [72,75,79,79,81,81];
    averageTemp[1] = [81,79,75,75,73,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); //72 75 79 79 81 81 81 79 75 75 73 72
    

    三维就三个for循环,以此类推。

    数组迭代方法

    数组迭代方法
    数组迭代方法
    • 数组合并
    var zero = 0;
    var positiveNumbers = [1,2,3];
    var negativeNumbers = [-3,-2,-1];
    
    console.log(negativeNumbers.concat(zero, positiveNumbers))//-3 -2 -1 0 1 2 3
    console.log(negativeNumbers.concat(positiveNumbers))//-3 -2 -1 1 2 3
    
    
    • 迭代器函数
    var isEven = function (x) {
    // 如果x是2的倍数,就返回true
    console.log(x);
    return (x % 2 == 0) ? true : false;
    // 也可以写成return (x % 2 == 0) ? true : false
    };
    var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    

    [every]数组numbers的第一个元素是1,它不是2的倍数, 因此isEven 函数返回false,然后every执行结束。

    numbers.every(isEven); // 1 false  
    

    [some] some方法和every的行为类似,不过some方法会迭代数组的每个元素,直到函数返回true:

    numbers.some(isEven); //1 2 true
    

    [forEach]如果要迭代整个数组,可以用forEach方法。它和使用for循环的结果相同:

    numbers.forEach(function(x){
    console.log((x % 2 == 0));
    }); // [false, true, false, true, false, true, false, true,
    false, true, false, true, false, true, false]
    

    [map]JavaScript还有两个会返回新数组的遍历方法。第一个是map:

    var myMap = numbers.map(isEven); //:[false, true, false, true, false, true, false, true,false, true, false, true, false, true, false]
    

    [filter]。它返回的新数组由使函数返回true的元素组成:

    var evenNumbers = numbers.filter(isEven);//[2, 4, 6, 8, 10, 12, 14]
    

    [reduce]reduce方法接收一个函数作为参数,这个函数有四个参数:previousValue、currentValue、index和array。这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后会返回这个累加器。对一个数组中的所有元素求和:

    numbers.reduce(function(previous, current, index){
    return previous + current;
    }); //120
    

    还有我写的另外一篇 js各种遍历方法总结

    相关文章

      网友评论

          本文标题:JS数据结构与算法之基础--数组的各种操作方法

          本文链接:https://www.haomeiwen.com/subject/xnyowxtx.html