zoukankan      html  css  js  c++  java
  • Array的总结

    Array

    Array的属性:

    Array.length

    Array的方法:

    Array.of

    arrary新建数组

    //of新建
    Array.of(7);       // [7] 
    Array.of(1, 2, 3); // [1, 2, 3]
    //传统新建
    Array(7);          // [ , , , , , , ]
    Array(1, 2, 3);    // [1, 2, 3]
    

    Array.isArray

    检验是否数组

    Array.isArray([1, 2, 3]); 
    

    Array.from

    从一个类似数组(如NodeList,arguments)或可迭代对象(如map,set,string既是数组又是可迭代对象)创建一个新的数组实例。

    //字符串转换
    Array.from('foo');
    // ["f", "o", "o"]
    
    //map转换
    var m = new Map([[1, 2], [2, 4], [4, 8]]);
    Array.from(m);      //[[1,2],[2,4],[4,8]]
    
    // 使用 map 函数转换数组元素
    Array.from([1, 2, 3], x => x + x);      // [2, 4, 6]
    
    // 生成一个数字序列
    Array.from({length:5}, (v, k) => k);    // [0, 1, 2, 3, 4]
    
    //数组去重
    var arr = [1,2,1,2,2,1];
    //new Set 数组去重
    function unique(arr){
      return Array.from(new Set(arr));//去重复
    };
    console.log(unique(arr));
    
    //es6
    (function(first,...rest){
        log('first',first);//1
        log('rest',rest);//['Second,3']
    })(1,'Second',3);
    
    
    //es5
    (function(){
        var first = arguments[0];
        var rest = Array.from(arguments).slice(1);
        log('first',first);
        log('rest',rest);
    })(1,'Second',3)
    

    Array.prototype.concat()

    用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

    let arr1 = ["a", "b", "c"];
    let arr2 = ["d", "e", "f"];
    let arr3 = arr1.concat(arr2);
    console.log(arr3);
    // results in a new array 
    // [ "a", "b", "c", "d", "e", "f" ]
    console.log(arr1);
    // ["a", "b", "c"]
    console.log(arr2);
    // ["d", "e", "f"]
    

    Array.prototype.entries

    返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

    var arr = ["a", "b", "c"];
    var iterator = arr.entries();
    // undefined
    console.log(iterator);
    // Array Iterator {}
    console.log(iterator.next().value); 
    // [0, "a"]
    console.log(iterator.next().value); 
    // [1, "b"]
    console.log(iterator.next().value); 
    // [2, "c"]
    var arr = ["a", "b", "c"];
    var iterator = arr.entries();
    // undefined
    for (let e of iterator) {
        console.log(e);
    }
    // [0, "a"] 
    // [1, "b"] 
    // [2, "c"]
    

    Array.prototype.every()

    every() 方法测试数组的所有元素是否通过了指定函数的测试。都通过就返回true,否则返回false

    function isBigEnough(element, index, array) {
      return (element >= 10);
    }
    var passed = [12, 5, 8, 130, 44].every(isBigEnough);
    // passed is false
    passed = [12, 54, 18, 130, 44].every(isBigEnough);
    // passed is true
    

    让不支持every的浏览器支持:

    if (!Array.prototype.every)
    {
      Array.prototype.every = function(fun /*, thisArg */)
      {
        'use strict';
        if (this === void 0 || this === null)
          throw new TypeError();
        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun !== 'function')
            throw new TypeError();
        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
        for (var i = 0; i < len; i++)
        {
          if (i in t && !fun.call(thisArg, t[i], i, t))
            return false;
        }
        return true;
      };
    }
    

    Array.prototype.some()

    some()方法测试数组中的某些元素是否通过由提供的函数实现的测试。

    与every的区别就是或||和与&&的区别

    function isBiggerThan10(element, index, array) {
      return element > 10;
    }
    [2, 5, 8, 1, 4].some(isBiggerThan10);  // false
    [12, 5, 8, 1, 4].some(isBiggerThan10); // true
    

    Array.prototype.fill()

    数组填充

    arr .fill(value(填充的值),start(开始索引,可选) ,end(结束索引))

    [1, 2, 3].fill(4);               // [4, 4, 4]
    [1, 2, 3].fill(4, 1);            // [1, 4, 4]
    [1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
    [1, 2, 3].fill(4, 1, 1);         // [1, 2, 3]
    [1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]
    [1, 2, 3].fill(4, NaN, NaN);     // [1, 2, 3]
    Array(3).fill(4);                // [4, 4, 4]
    [].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}
    [].fill.call(new Array(100),0) // [0,0,0,0,...,0] //100项
    

    Array.prototype.map()

    //数组每个平方
    function pow(x) {
        return x * x;
    }
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    Array.prototype.reduce() Array.prototype.reduceRight()

    按照某种规则减少数组的数量

    //求和
    var arr = [1, 3, 5, 7, 9];
    arr.reduce(function (x, y) {
        return x + y;
    }); // 25
    
    //传统数组求和
    Array.prototype.sum = function (){
     var result = 0;
     for(var i = 0; i < this.length; i++) {
      result += this[i];
     }
     return result;
    };
    [1,4,7,2,10].sum(); // 24
    
    //不传统求和,在数组极长的时候效率会指数提高
    eval([1,4,7,2,10].join('+'))//24
    

    Array .prototype .filter()

    过滤不符合要求的元素,filter是不会改变远数组的,有点类似every(),但every返回的是boolean

    function isBigEnough(value) {
      return value >= 10;
    }
    
    var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
    // filtered is [12, 130, 44]
    

    Array.prototype.find()

    find()方法返回数组中满足提供的测试功能的第一个元素的值。否则返回undefined。

    //一个求素数函数
    function isPrime(element, index, array) {
      var start = 2;
      while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) {
          return false;
        }
      }
      return element > 1;
    }
    
    console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
    console.log([4, 5, 8, 12].find(isPrime)); // 5
    

    Array.prototype.findIndex()

    findIndex()方法返回数组中满足提供的测试功能的第一个元素的索引。否则返回-1。与find方法十分的相似。

    Array.prototype.findIndex()

    Array.prototype.forEach()

    function logArrayElements(element, index, array) {
      console.log('a[' + index + '] = ' + element);
    }
    
    // undefined的项会被略过。
    [2, 5, , 9].forEach(logArrayElements);
    // a[0] = 2
    // a[1] = 5
    // a[3] = 9
    
    function Counter() {
      this.sum = 0;
      this.count = 0;
    }
    Counter.prototype.add = function(array) {
      array.forEach(function(entry) {
        this.sum += entry;
        ++this.count;
      }, this);
      // ^---- Note
    };
    var obj = new Counter();
    obj.add([2, 5, 9]);
    obj.count
    // 3 
    obj.sum
    // 16
    

    Array.prototype.includes()

    includes()方法确定数组是否包含某个元素,返回true或false。

    [1, 2, 3].includes(2);     // true
    [1, 2, 3].includes(4);     // false
    [1, 2, 3].includes(3, 3);  // false
    [1, 2, 3].includes(3, -1); // true
    [1, 2, NaN].includes(NaN); // true
    

    Array.prototype.indexOf()

    indexOf()方法返回在数组中可以找到给定元素的第一个索引,如果不存在则返回-1。

    var array = [2, 9, 9];
    array.indexOf(2);     // 0
    array.indexOf(7);     // -1
    array.indexOf(9, 2);  // 2
    array.indexOf(2, -1); // -1
    array.indexOf(2, -3); // 0
    

    Array.prototype.join()

    把数组(或数组类对象)的所有元素连接到字符串中。

    var a = ['Wind', 'Rain', 'Fire'];
    a.join();      // 'Wind,Rain,Fire'
    a.join(', ');  // 'Wind, Rain, Fire'
    a.join(' + '); // 'Wind + Rain + Fire'
    a.join('');    // 'WindRainFire'
    

    Array.prototype.lastIndexOf()

    Array.prototype.pop()

    该pop()方法从数组中删除最后一个元素,并返回该元素。此方法更改数组的长度。

    Array.prototype.push()

    该push()方法将一个或多个元素添加到数组的末尾并返回数组的新长度。

    Array.prototype.shift()

    该shift()方法从数组中删除第一个元素并返回该元素。此方法更改数组的长度。

    Array.prototype.unshift()

    unshift()方法将一个或多个元素添加到数组的开头,并返回新数组的新长度。

    Array.prototype.reserve()

    该reverse()方法将阵列反转到位。第一个数组元素成为最后一个数组元素,最后一个数组元素成为第一个。

    Array.prototype.splice()

    array .splice(start,deleteCount,item1,item2,...)
    //从下标start开始,删除deleteCount个元素,然后插入item1,item2...
    

    通过删除现有元素和/或添加新元素来更改数组的内容。

    Array.prototype.slice()

    arr.slice(begin, end)
    //begin,end可省略,默认为开始和结尾
    

    把数组从begin到end(并不包括end)的部分浅拷贝到新的数组对象。原始数组不会被修改。

    silce省略参数,可以把类数组的形式(具有length)转换到数组

    function list() {
      return Array.prototype.slice.call(arguments);
    }
    
    var list1 = list(...[1,2,3,4]); // [1, 2, 3,4]
    

    Array.prototype.sort()

    sort()方法排序的数组的元素代替,并返回该数组。
    参数为定义排序顺序的函数。如果省略,则根据每个字符的Unicode代码点值,根据每个元素的字符串转换对数组进行排序。

    var numbers = [4, 2, 5, 1, 3];
    numbers.sort(function(a, b) {
      return a - b;
    });
    console.log(numbers);
    // [1, 2, 3, 4, 5]
    
    
    var items = [
      { name: 'Edward', value: 21 },
      { name: 'Sharpe', value: 37 },
      { name: 'And', value: 45 },
      { name: 'The', value: -12 },
      { name: 'Magnetic', value: 13 },
      { name: 'Zeros', value: 37 }
    ];
    // sort by value
    items.sort(function (a, b) {
      return a.value - b.value;
    });
    // sort by name
    items.sort(function(a, b) {
      var nameA = a.name.toUpperCase(); // ignore upper and lowercase
      var nameB = b.name.toUpperCase(); // ignore upper and lowercase
      if (nameA < nameB) {
        return -1;
      }
      if (nameA > nameB) {
        return 1;
      }
    
      // names must be equal
      return 0;
    });
  • 相关阅读:
    C#实战Microsoft Messaging Queue(MSMQ)
    Spring注解用法
    Last_IO_Errno: 1032
    浅谈TCP/IP网络编程中socket的行为
    Golang网络库中socket阻塞调度源码剖析
    delphi新语法之泛型实现的对象池模板
    Delphi 编码转换 Unicode gbk big5(使用LCMapString设置区域后,再用API转换)
    提高Delphi的编译速度(bpl和bcp)
    解决jqplot与jquery-ui导入必要包时的冲突
    Linux系统下用C语言获取MAC地址
  • 原文地址:https://www.cnblogs.com/mydia/p/6746487.html
Copyright © 2011-2022 走看看