美文网首页
第2章 数组

第2章 数组

作者: 不系流年系乾坤 | 来源:发表于2016-11-01 12:00 被阅读4次

    Array

    var daysOfWeek = [];
    
    var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    
    var daysOfWeek = new Array(); //{1}
    
    var daysOfWeek = new Array(7); //{2}
    
    console.log(daysOfWeek.length);
    
    var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); //{3}
    
    for (var i=0; i<daysOfWeek.length; i++){
        console.log(daysOfWeek[i]);
    }
    
    //console.table(daysOfWeek);
    
    //fibonacci numbers
    // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
    var fibonacci = []; //{1}
    fibonacci[1] = 1; //{2}
    fibonacci[2] = 1; //{3}
    
    for(var i = 3; i < 20; i++){
        fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; ////{4}
    }
    
    for(var i = 1; i<fibonacci.length; i++){ //{5}
        console.log(fibonacci[i]);           //{6}
    }
    
    //instead of {5} and {6} we can simply use
    console.log(fibonacci);
    

    添加删除

    function printArray(myArray) {
        for (var i=0; i<myArray.length; i++){
            console.log(myArray[i]);
        }
    }
    
    var numbers = [0,1,2,3,4,5,6,7,8,9];
    
    //add a new element to the numbers array
    numbers[numbers.length] = 10;
    
    numbers.push(11);
    
    numbers.push(12, 13);
    
    //printArray(numbers);
    
    //insert first position manually
    for (var i=numbers.length; i>=0; i--){
        numbers[i] = numbers[i-1];
    }
    
    numbers[0] = -1;
    
    //printArray(numbers);
    
    //using method unshift
    numbers.unshift(-2);
    
    //printArray(numbers);
    
    numbers.unshift(-4, -3);
    
    //printArray(numbers);
    
    //**** Removing elements
    
    numbers.pop();
    
    //remove first position manually
    /*for (var i=0; i<numbers.length; i++){
        numbers[i] = numbers[i+1];
    }*/
    
    printArray(numbers);
    
    console.log(numbers.length);
    
    //using method shift
    numbers.shift();
    
    printArray(numbers);
    console.log(numbers.length);
    
    //**** Removing and Adding elements from the middle of the array or specific position
    //splice method - parameter (index, howManyPositionsToBeRemoved, item1...itemX)
    numbers.splice(5,3);
    
    console.log('----');
    
    printArray(numbers);
    
    numbers.splice(5,0,2,3,4);
    
    console.log('----');
    
    printArray(numbers);
    
    console.log('----');
    
    numbers.splice(5,3,2,3,4);
    
    printArray(numbers);
    

    二维与多维数组

    var averageTempDay1 = [72,75,79,79,81,81];
    var averageTempDay2 = [81,79,75,75,73,72];
    
    var averageTemp = [];
    
    //same as
    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);
    
    //same as
    
    //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;
    
    printMatrix(averageTemp);
    
    //** Multidimensional Matrix
    
    //Matrix 3x3x3 - Cube
    
    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]);
            }
        }
    }
    

    js数组方法参考

    js数组中的常用方法总结
    
    栈方法(后进先出)
    
    ArrayObj.push()方法
    
    ArrayObj.pop()方法
    
    ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度。
    ArrayObj.pop():就是向数组中删除数组最后一个元素并且返回该元素。如果数组为空就返回undefined。
    
    队列方法(先进先出)
    
    ArrayObj.shift()
    
    ArrayObj.unshift()
    
    ArrayObj.shift():方法用于把数组中的第一个元素删除,并返回第一个元素的值。
    如果数组是空的,则shift() 方法不进行任何操作,返回undefined。请注意,该方法不创建新数组,而是直接修改原来的数组。该方法会改变数组的长度。
    
    ArrayObj.unshift() :该方法可把它的参数顺序添加到数组的头部。它直接修改了数组,而不是创建一个新的数组。返回的是新数组的长度。 
    unshift()在IE6,IE7下,数据有添加成功,但返回值却是undefined.
    
    转换方法
    
    join()方法
    
    join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。返回一个字符串。
    
    重排序方法
    
    reverse()方法
    
    sort()方法
    
    reverse()方法会对反转数组项的顺序。
    
    var values = [1, 2, 3, 4, 5];
    values.reverse();
    alert(values);  //5,4,3,2,1
    这里数组的初始值及顺序是1、2、3、4、5。而调用数组的reverse()方法后,其值的顺序变成了5、4、3、2、1。
    
    sort()方法按升序排列数组——即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,以确定如何排序。即使数组中的每一项都是数组,sort()方法比较的也是字符串,如下所示:
    
    var values = [0, 1, 5, 10, 15];
    values.sort();
    alert(values);  //0,1,10,15,5
    这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接受一个比较函数作为参数,以便我们指定那个值位于那个值的前面。
    
    比较函数接受两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数位于第二个之后则返回一个正数。以下就是一个简单的比较函数:
    
    
    function compare(value1, value2) {
       if (value1 < value2) {
           return -1;
       } else if (value1 > value2) {
           return 1;
       } else {
           return 0;
       }
    }
    
    
    
    这个比较函数可以使用于大多数数据类型,只要将其作为参数传递给sort()方法即可,如下面这个例子所示:
    
    var values = [0, 1, 2, 5, 10, 15];
    values.sort(compare);
    alert(values);  //0,1,5,10,15
    
    
    在将比较函数传递到sort()方法之后,数值仍然保持了正确的升序。当然,也可以通过比较函数产生降序排序的结果,只要交换比较函数返回的值即可:
    
    
    function compare(value1, value2) {
       if (value1 < value2) {
           return 1;
       } else if (value1 > value2) {
           return -1;
       } else {
           return 0;
       }
    }
    var values = [0, 1, 2, 5, 10, 15];
    values.sort(compare);
    alert(values);  //15,10,5,1,0
    
    reverse()和sort()方法会返回值是经过排序之后的数组。
    
    对于数值类型或者其valueOf方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个值减第一个值即可:
    
    function compare(value1, value2) {
       return value2 - value1;
    }
    由于比较函数通过返回一个小于零、等于零或大于零的值来影响排序结果,因此减法操作就可以适当处理所有情况。
    
    操作方法
    
    concat()方法
    
    slice()方法
    
    splice()方法
    
    concat() 方法用于连接两个或多个数组。
    该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
    
    
    <script type="text/javascript">
    
    var a = [1,2,3];
    document.write(a.concat(4,5));
    
    </script>
    
    输出的结果:1,2,3,4,5
    
    slice(start,end)方法
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
    返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
    
    splice() 方法用于插入、删除或替换数组的元素
    语法:arrayObject.splice(index,howmany,element1,.....,elementX)
    
    index 必需。规定从何处添加/删除元素。
    该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
    
    howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
    如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
    
    element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。 
    elementX 可选。可向数组添加若干元素。
    
    返回值:如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
    说明:splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
    
    下面简要概括一下slice()与splice()方法
    
    slice(start, end); slice()方法返回从参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起死和结束位置之间的项,但不包括结束位置的项。
    
    
    var colors = ["red", "green", "blue", "yellow", "purple"];
    var colors2 = colors.slice(1);
    var colors3 = colors.slice(1,4);
    
    console.log(colors2); // green, blue, yellow, purple
    console.log(colors3); // green, blue, yellow
    
    splice()有删除,插入,替换的功能
    
    删除
    需要两个参数,要删除的第一项的位置和要删除的项数。
    
    var colors = ["red", "green", "blue"];
    var removed = colors.splice(0,1);
    console.log(colors); // greeen, blue
    console.log(removed); // red
    插入
    需要三个参数:起始位置、0(要删除的项数)和要插入的项
    
    var colors = ["red", "green", "blue"];
    var removed = colors.splice(1,0,"yellow", "orange");
    console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
    console.log(removed); // 返回空
    替换
    需要三个参数:起始位置、要删除的项数和要插入的任意数量的项。
    
    var colors = ["red", "green", "blue"];
    var removed = colors.splice(1,1,"yellow", "orange");
    console.log(colors);  // ["red", "yellow", "orange", "blue"]
    console.log(removed); // ["green"]
    

    //*** contact
    var zero = 0;
    var positiveNumbers = [1,2,3];
    var negativeNumbers = [-3,-2,-1];
    var numbers = negativeNumbers.concat(zero, positiveNumbers);
    
    console.log(numbers);
    
    //console.log(numbers);
    
    //*** every and some
    var isEven = function (x) {
        // returns true if x is a multiple of 2.
        console.log(x);
        return (x % 2 == 0) ? true : false;
    };
    var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    
    numbers.every(isEven); //is going to execute the function only once
    
    console.log('---');
    
    numbers.some(isEven); //is going to execute the function twice
    
    numbers.forEach(function(x){
        console.log((x % 2 == 0));
    });
    
    console.log(numbers.reverse());
    
    //console.log('*** filter ***');
    
    var evenNumbers = numbers.filter(isEven);
    
    //console.log(evenNumbers);
    
    console.log('*** map ***');
    
    //console.log(numbers.map(isEven));
    
    console.log(numbers.reduce(function(previous, current, index){
        return previous + current;
    }));
    
    console.log(numbers.sort());
    
    console.log(numbers.sort(function(a,b){
        return a-b;
    }));
    
    function compare(a, b) {
        if (a < b) {
            return -1;
        }
        if (a > b) {
            return 1;
        }
        // a must be equal to b
        return 0;
    }
    
    console.log(numbers.sort(compare));
    
    //Sorting objects
    
    var friends = [
        {name: 'John', age: 30},
        {name: 'Ana', age: 20},
        {name: 'Chris', age: 25}
    ];
    
    function comparePerson(a, b){
        if (a.age < b.age){
            return -1
        }
        if (a.age > b.age){
            return 1
        }
        return 0;
    }
    
    console.log(friends.sort(comparePerson));
    
    var names =['Ana', 'ana', 'john', 'John'];
    console.log(names.sort());
    
    console.log(names.sort(function(a, b){
        if (a.toLowerCase() < b.toLowerCase()){
            return -1
        }
        if (a.toLowerCase() > b.toLowerCase()){
            return 1
        }
        return 0;
    }));
    
    var names2 = ['Maève', 'Maeve'];
    console.log(names2.sort(function(a, b){
        return a.localeCompare(b);
    }));
    
    //*** toString
    console.log(numbers.toString());
    
    console.log(numbers.indexOf(10));
    console.log(numbers.indexOf(100));
    
    numbers.push(10);
    console.log(numbers.lastIndexOf(10));
    console.log(numbers.lastIndexOf(100));
    
    var numbersString = numbers.join('-');
    console.log(numbersString);
    
    把数组内容发送到服务器,或进行编码解码,很有用
    

    ES6

    let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    
    //********** forEch using arrow functions
    console.log('forEach using arrow functions');
    
    numbers.forEach(x => {
        console.log((x % 2 == 0));
    });
    
    //********** using for..of loop
    console.log('using for..of loop');
    
    for (let n of numbers) {
        console.log((n % 2 == 0) ? 'even' : 'odd');
    }
    
    //********** Using the new ES6 iterator (@@iterator)
    console.log('Using the new ES6 iterator (@@iterator)');
    
    let iterator = numbers[Symbol.iterator]();
    console.log(iterator.next().value); //1
    console.log(iterator.next().value); //2
    console.log(iterator.next().value); //3
    console.log(iterator.next().value); //4
    console.log(iterator.next().value); //5
    
    //********** Array entries, keys and values
    console.log('Array entries, keys and values');
    
    console.log('Array.entries');
    let aEntries = numbers.entries(); //retrieve iterator of key/value
    console.log(aEntries.next().value); // [0, 1] - position 0, value 1
    console.log(aEntries.next().value); // [1, 2] - position 1, value 2
    console.log(aEntries.next().value); // [2, 3] - position 2, value 3
    
    console.log('Array.keys');
    let aKeys = numbers.keys(); //retrieve iterator of keys
    console.log(aKeys.next()); // {value: 0, done: false } done false means iterator has more values
    console.log(aKeys.next()); // {value: 1, done: false }
    console.log(aKeys.next()); // {value: 2, done: false }
    
    console.log('Array.values');
    //let aValues = numbers.values();
    console.log(aValues.next()); // {value: 1, done: false } done false means iterator has more values
    console.log(aValues.next()); // {value: 2, done: false }
    console.log(aValues.next()); // {value: 3, done: false }
    
    //********** Using the from method
    console.log('Using the from method');
    
    let evens = Array.from(numbers, x => (x % 2 == 0));
    console.log(evens);
    
    let numbers2 = Array.from(numbers);
    console.log(numbers2);
    
    //********** Using Array.of
    console.log('Using Array.of');
    
    let numbers3 = Array.of(1);
    let numbers4 = Array.of(1,2,3,4,5,6);
    let numbersCopy = Array.of(...numbers4);
    console.log(numbers3);
    console.log(numbers4);
    console.log(numbersCopy);
    
    //********** Using the fill method
    console.log('Using the fill method');
    
    numbersCopy.fill(0);
    console.log(numbersCopy);
    
    numbersCopy.fill(2, 1);
    console.log(numbersCopy);
    
    numbersCopy.fill(1, 3, 5);
    console.log(numbersCopy);
    
    let ones = Array(6).fill(1);
    console.log(ones);
    
    //********** Using the copyWithin method
    console.log('Using the copyWithin method');
    
    let copyArray = [1, 2, 3, 4, 5, 6];
    console.log(copyArray);
    
    copyArray = copyArray.copyWithin(0, 3); //pos 3 value is copied to pos 0
    console.log(copyArray);
    
    copyArray = [1, 2, 3, 4, 5, 6];
    copyArray = copyArray.copyWithin(1, 3, 5); //pos 3-4 values are copied to pos 1-2
    console.log(copyArray);
    
    //********** methods find and findIndex
    console.log('methods find and findIndex');
    
    function multipleOf13(element, index, array) {
        return (element % 13 == 0) ? true : false;
    }
    
    console.log(numbers.find(multipleOf13));
    console.log(numbers.findIndex(multipleOf13));
    
    //********** EcmaScript 7: using the method includes
    console.log('EcmaScript 7: using the method includes');
    
    console.log(numbers.includes(15));
    console.log(numbers.includes(20));
    
    let numbers5 = [7,6,5,4,3,2,1];
    console.log(numbers5.includes(4,5));
    

    TypedArrays

    let length = 5;
    let int16 = new Int16Array(length);
    
    let array16 = [];
    array16.length = length;
    
    for (let i=0; i<length; i++){
        int16[i] = i+1;
    }
    
    console.log(int16);
    
    
    //Int8Array();
    //Uint8Array();
    //Uint8ClampedArray();
    //Int16Array();
    //Uint16Array();
    //Int32Array();
    //Uint32Array();
    //Float32Array();
    //Float64Array();
    

    http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/

    http://www.i-programmer.info/programming/javascript/6135-javascript-data-structures-typed-arrays.html

    相关文章

      网友评论

          本文标题:第2章 数组

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