• 数组方法总结 常用数组方法总结 js的数组或对象常用方法总结


    js常用数据类型的方法使用归纳 

    * String---->是一个对象
        * 字符串可以看成是字符组成的数组,但是js中没有字符类型

        * 字符是一个一个的,在别的语言中字符用一对单引号括起来

        * 在js中字符串可以使用单引号也可以使用双引号

        * 因为字符串可以看成是数组,所以,可以通过for循环进行遍历

        * 字符串特性:不可变性,字符串的值是不能改变

        * 字符串的值之所以看起来是改变的,那是因为指向改变了,并不是真的值改变了

    * 字符串的常用属性:
         * .length------>字符串的长度

         * .charAt(索引),返回值是指定索引位置的字符串,超出索引,结果是空字符串

         * .fromCharCode(数字值,可以是多个参数),返回的是ASCII码对应的值

         * .concat(字符串1,字符串2,...);返回的是拼接之后的新的字符串

         * .indexOf(要找的字符串,从某个位置开始的索引);返回的是这个字符串的索引值,没找到则返回-1

         * .lastIndexOf(要找的字符串);从后向前找,但是索引仍然是从左向右的方式,找不到则返回-1

         * .replace("原来的字符串","新的字符串");用来替换字符串的

         * .slice(开始的索引,结束的索引); 从索引5的位置开始提取,到索引为10的前一个结束,没有10,并返回这个提取后的字符串

         * .split("要干掉的字符串",切割后留下的个数);切割字符串

         * .substr(开始的位置,个数);返回的是截取后的新的字符串

         * .substring(开始的索引,结束的索引),返回截取后的字符串,不包含结束的索引的字符串

         * .toLocaleLowerCase();转小写

         * .toLowerCase();转小写

         * .toLocaleUpperCase()转大写

         * .toUpperCase();转大写

         * .trim();干掉字符串两端的空格

    总结Date对象的用法:
    var dt=new Date();

       var dt=+new Date();//一种特殊的写法,只适用于这个Date的对象

       console.log(dt);

        dt.getFullYear();//年

        dt.getMonth();//月---从0开始

        dt.getDate();//日

        dt.getHours();//小时

        dt.getMinutes();//分钟

        dt.getSeconds();//秒

        dt.getDay();//星期---从0开始

        dt.toDateString();//日期

        dt.toLocaleDateString();//日期

        dt.toTimeString();//时间

        dt.toLocaleTimeString();//时间

        dt.valueOf();//毫秒

    Array对象的方法;
     * Array.isArray(对象)---->判断这个对象是不是数组

         * instanceof关键字

         * .concat(数组,数组,数组,...) 组合一个新的数组

         * .every(函数)--返回值是布尔类型,函数作为参数使用,函数中有三个参数,第一个参数是元素的值,第二个参数是索引值,第三个参数是原来的数组(没用)

         * 如果这个数组中的每个元素的值都符合条件,最后才返回的是true

         *

         * .filter(函数);返回的是数组中每一个元素都复合条件的元素,组成了一个新的数组

         *

         * .push(值);--->把值追加到数组中,加到最后了---返回值也是追加数据之后的数组长度

         * .pop();--->删除数组中最后一个元素,返回值就是删除的这个值

         * .shift();--->删除数组中第一个元素,返回值就是删除的这个值

         * .unshift();--->向数组的第一个元素前面插入一个新的元素,----返回值是插入后的程度

         * .forEach(函数)方法---遍历数组用---相当于for循环

         * .indexOf(元素值);返回的是索引,没有则是-1

         * .join("字符串");----返回的是一个字符串

         * .map(函数);--->数组中的每个元素都要执行这个函数,把执行后的结果重新的全部的放在一个新的数组中

         * .reverse();----->反转数组

         * .sort();---排序的,可能不稳定,如果不稳定,请写MDN中的那个固定的代码

         * .arr.slice(开始的索引,结束的索引);把截取的数组的值放在一个新的数组中,但是不包含结束的索引对应的元素值

         * .splice(开始的位置,要删除的个数,替换的元素的值);一般是用于删除数组中的元素,或者是替换元素,或者是插入元素

      基本包装类型

        普通变量不能直接调用属性或者方法

        对象可以直接调用属性和方法

        *基本包装类型:本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而是基本包装类型,这个变量也不是普通的变量了,而是基本包装类型对象

    //string number boolean

      var str="hello";

    //    str=str.replace("ll","HH");

    //    console.log(str);

    //    var str=new String("hello");

    //    str=str.replace("ll","HH");

    //    console.log(str);

    //    str=null;

    //    var num=10;//number---->

    //    console.log(num.toString())

     //如果是一个对象&&true,那么结果是true

        //如果是一个true&&对象,那么结果是对象

    //    var flag=new Boolean(false);

    //    var result=true&&flag;

    //    console.log(result);

     实例对象:通过构造函数创建出来,实例化的对象
        *静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用,

        实例方法必须通过实例对象调用

        静态方法必须通过大写的对象调用

        >Math.PI----π---

        >Math.E----常数的底数

        >Math.abs(值)-----绝对值

        >Math.ceil(值)----向上取整

        >Math.floor(值)---向下取整
    ———————————————— 

    数组的基本使用方法

    concat()方法可以基于当前数组中的所有项创建一个新数组1. concat()   :数组拼接

      1) 当参数是数组:将参数数组拼接在原始数组后面;

      2)当参数非数组:将参数每一项一次拼接在原始数组后面

       var colors = ["red", "green", "blue"];
        var colors2 = colors.concat("yellow", ["black", "brown"]);    alert(colors);     //red,green,blue
        alert(colors2);    //red,green,blue,yellow,black,brown
    2.slice() :数组截取,接受1个或2个参数(返回项的起始和结束位置)

     基于当前数组中的一或多个项创建一个新数组

      1)当只有一个参数:参数为截取的起始位置下标(包含此项),一直截取到原始数据最后

      2)当有两个参数:第一个参数代表起始位置下标(包含此项),第二个参数代表结束位置下标(不包含此项)(下标含前不含后)

        var colors = ["red", "green", "blue", "yellow", "purple"];
        var colors2 = colors.slice(1);
        var colors3 = colors.slice(1,4);
    
        alert(colors2);   //green,blue,yellow,purple
        alert(colors3);   //green,blue,yellow
    3.splice() :号称最强大的数组方法
      三种使用方式
        1)删除
         可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。
           例如,splice(0,2)会删除数组中的前两项。
        2)插入
         可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数) 和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。
          例如, splice(2,0,"red","green")会从当前数组的位置 2 开始插入字符串"red"和"green"。
        3)替换
         可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起 始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。
          例如, splice (2,1,"red","green")会删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串 "red"和"green"。
      splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何 项,则返回一个空数组)。下面的代码展示了上述 3 种使用 splice()方法的方式。
    
    

    var colors = ["red", "green", "blue"];
    var removed = colors.splice(0,1);          // 删除第一项

    alert(colors); // green,blue

    alert(removed); // red,返回的数组中只包含一项

    removed = colors.splice(1, 0, "yellow", "orange");        // 从位置 1 开始插入两项

    alert(colors); // green,yellow,orange,blue

    alert(removed); // 返回的是一个空数组

    removed = colors.splice(1, 1, "red", "purple");         // 插入两项,删除一项

    alert(colors); // green,red,purple,orange,blue

    alert(removed); // yellow,返回的数组中只包含一项

    数组常用的方法filter、map、forEach、every、some

     
    1 var arr=[1,2,3,4];
    2 console.log( arr.map((n)=>n*n) );//[1, 4, 9, 16]
    3 console.log( arr.map((n)=>n-1) );//[0, 1, 2, 3]

    从数组[1,4,-5,10]当中给我找出小于0的数字。在你看到这里的时候相信你也是对箭头函数了解,(n)=>n*n 就不用赘述了。

    filter方法:

    复制代码
     1 var users = [
     2   {name: "张含韵", "email": "zhang@email.com"},
     3   {name: "江一燕",   "email": "jiang@email.com"},
     4   {name: "李小璐",  "email": "li@email.com"}
     5 ];
     6 //获取所有人的email
     7 var emails=users.map(user=>user.email) 
     8 console.log(emails.join(',')) //"zhang@email.com", "jiang@email.com", "li@email.com"
     9 //获取指定人的email
    10 var liEmail=emails.filter(email=>/^li/.test(email))
    11 console.log(liEmail.join('')) //li@email.com
    复制代码

    获取用户列表里的所有用户的email,map帮我们做到了,map方法通过传一个形参,这个形参就代表users里的每一项,map内部通过遍历所有的用户项,获取到每个用户项的email,再push到一个数组,再作为值给我们返回。第二步,我们需要获取指定人的email,filter方法登场了,通过过滤筛选email是数组,给我们返回结果,筛选方法得我们定,这里筛选方法是以正则匹配到li开头的那一个email,然后返回。

    find方法:

    1 [1, 4, -5, 10].find((n) => n < 0)    // -5

    find方法比较好理解,这里的参数n代表数组里的每一项,然后find方法内部通过遍历数组里的每一项,找到<0的这一项( - 5 )。

     

    findIndex方法:find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。看一个例子:

    1 [1, 4, -5, 10].findIndex((value,index,arr) => value < 0)  // 2

    在这个例子当中,value代表这个数组的每一项,1,4,-5,10。index代表每一项的索引值,arr代表这个数组[1, 4, -5, 10],然后我们需要返回的是<0的这一项的索引值,即是2了。

    这4个方法内部机制都有一个遍历过程,比起forEach确实简洁多了。

     

     接着补充ES6-some( ) 和 every( )方法的讲解: 

    复制代码
     1     //every()
     2     let numbers = [2, 4, 10, 4, 8];
     3     let a = numbers.every((item,index)=>{
     4         if(item%2===0){
     5             return true;
     6         }else{
     7             return false;
     8         }
     9     });
    10     console.log(a)
    11 
    12     //some()
    13     let b=numbers.some((item,index)=>{
    14          if(item%3===0){
    15             return true;
    16         }else{
    17             return false;
    18         }
    19     })
    20     console.log(b)
    复制代码

    some 英语翻译为一些,every翻译为所有,每个,所以some方法 只要其中一个为true 就会返回true的,相反,every()方法必须所有都返回true才会返回true,哪怕有一个false,就会返回false;every()和 some()目的:确定数组的所有成员是否满足指定的测试。具体请参考MDNhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

    后续补充:最近看很多小伙伴都在学习ES6,比如ES6中的map,在ES5中是怎么实现的呢?

    复制代码
      1 /*
      2  * MAP对象,实现MAP功能
      3  *
      4  * 接口:
      5  * size()                     获取MAP元素个数
      6  * isEmpty()                  判断MAP是否为空
      7  * clear()                    删除MAP所有元素
      8  * put(key, value)            向MAP中增加元素(key, value) 
      9  * remove(key)                删除指定KEY的元素,成功返回True,失败返回False
     10  * get(key)                   获取指定KEY的元素值VALUE,失败返回NULL
     11  * element(index)             获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
     12  * containsKey(key)           判断MAP中是否含有指定KEY的元素
     13  * containsValue(value)       判断MAP中是否含有指定VALUE的元素
     14  * values()                   获取MAP中所有VALUE的数组(ARRAY)
     15  * keys()                     获取MAP中所有KEY的数组(ARRAY)
     16  *
     17  * 例子:
     18  * var map = new Map();
     19  *
     20  * map.put("key", "value");
     21  * var val = map.get("key")
     22  * ……
     23  *
     24  */
     25 function Map() {
     26     this.elements = new Array();
     27 
     28     //获取MAP元素个数
     29     this.size = function() {
     30         return this.elements.length;
     31     };
     32 
     33     //判断MAP是否为空
     34     this.isEmpty = function() {
     35         return (this.elements.length < 1);
     36     };
     37 
     38     //删除MAP所有元素
     39     this.clear = function() {
     40         this.elements = new Array();
     41     };
     42 
     43     //向MAP中增加元素(key, value) 
     44     this.put = function(_key, _value) {
     45         this.elements.push( {
     46             key : _key,
     47             value : _value
     48         });
     49     };
     50 
     51     //删除指定KEY的元素,成功返回True,失败返回False
     52     this.removeByKey = function(_key) {
     53         var bln = false;
     54         try {
     55             for (i = 0; i < this.elements.length; i++) {
     56                 if (this.elements[i].key == _key) {
     57                     this.elements.splice(i, 1);
     58                     return true;
     59                 }
     60             }
     61         } catch (e) {
     62             bln = false;
     63         }
     64         return bln;
     65     };
     66     //删除指定KEY的所有元素
     67     this.removeAllByKey=function(_key){
     68         for (var i = this.elements.length - 1; i >= 0; i--) {
     69             if (this.elements[i].key == _key) {
     70                 this.elements.splice(i, 1);
     71             }
     72         }
     73     }
     74     
     75     //删除指定VALUE的元素,成功返回True,失败返回False
     76     this.removeByValue = function(_value) {//removeByValueAndKey
     77         var bln = false;
     78         try {
     79             for (i = 0; i < this.elements.length; i++) {
     80                 if (this.elements[i].value == _value) {
     81                     this.elements.splice(i, 1);
     82                     return true;
     83                 }
     84             }
     85         } catch (e) {
     86             bln = false;
     87         }
     88         return bln;
     89     };
     90     
     91     //删除指定VALUE的元素,成功返回True,失败返回False
     92     this.removeByValueAndKey = function(_key,_value) {
     93         var bln = false;
     94         try {
     95             for (i = 0; i < this.elements.length; i++) {
     96                 if (this.elements[i].value == _value && this.elements[i].key == _key) {
     97                     this.elements.splice(i, 1);
     98                     return true;
     99                 }
    100             }
    101         } catch (e) {
    102             bln = false;
    103         }
    104         return bln;
    105     };
    106 
    107     //获取指定KEY的所有元素值VALUE,以数组形式返回,失败返回false
    108     this.get = function(_key) {
    109         var arr=[];
    110         try {
    111             for (i = 0; i < this.elements.length; i++) {
    112                 if (this.elements[i].key == _key) {
    113                     arr.push(this.elements[i].value)
    114                 }
    115             }
    116             return arr;
    117         } catch (e) {
    118             return false;
    119         }
    120         return false;
    121     };
    122 
    123     //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
    124     this.element = function(_index) {
    125         if (_index < 0 || _index >= this.elements.length) {
    126             return null;
    127         }
    128         return this.elements[_index];
    129     };
    130 
    131     //判断MAP中是否含有指定KEY的元素
    132     this.containsKey = function(_key) {
    133         var bln = false;
    134         try {
    135             for (i = 0; i < this.elements.length; i++) {
    136                 if (this.elements[i].key == _key) {
    137                     bln = true;
    138                 }
    139             }
    140         } catch (e) {
    141             bln = false;
    142         }
    143         return bln;
    144     };
    145 
    146     //判断MAP中是否含有指定VALUE的元素
    147     this.containsValue = function(_value) {
    148         var bln = false;
    149         try {
    150             for (i = 0; i < this.elements.length; i++) {
    151                 if (this.elements[i].value == _value) {
    152                     bln = true;
    153                 }
    154             }
    155         } catch (e) {
    156             bln = false;
    157         }
    158         return bln;
    159     };
    160     
    161     //判断MAP中是否含有指定key,VALUE的元素
    162     this.containsObj = function(_key,_value) {
    163         var bln = false;
    164         try {
    165             for (i = 0; i < this.elements.length; i++) {
    166                 if (this.elements[i].value == _value && this.elements[i].key == _key) {
    167                     bln = true;
    168                 }
    169             }
    170         } catch (e) {
    171             bln = false;
    172         }
    173         return bln;
    174     };
    175 
    176     //获取MAP中所有VALUE的数组(ARRAY)
    177     this.values = function() {
    178         var arr = new Array();
    179         for (i = 0; i < this.elements.length; i++) {
    180             arr.push(this.elements[i].value);
    181         }
    182         return arr;
    183     };
    184     //获取MAP中所有指定VALUE的元素数组(ARRAY)
    185     this.getAllByValue=function(_value){
    186         var arr=[];
    187         for (var i = this.elements.length - 1; i >= 0; i--) {
    188             if (this.elements[i].value == _value) {
    189                 arr.push(this.elements[i]);
    190             }
    191         }
    192         return arr;   
    193     }
    194     
    195     //获取MAP中指定key的所有VALUE的数组(ARRAY)
    196     this.valuesByKey = function(_key) {
    197         var arr = new Array();
    198         for (i = 0; i < this.elements.length; i++) {
    199             if (this.elements[i].key == _key) {
    200                 arr.push(this.elements[i].value);
    201             }
    202         }
    203         return arr;
    204     };
    205 
    206     //获取MAP中所有KEY的数组(ARRAY)
    207     this.keys = function() {
    208         var arr = new Array();
    209         for (i = 0; i < this.elements.length; i++) {
    210             arr.push(this.elements[i].key);
    211         }
    212         return arr;
    213     };
    214     
    215     //获取key通过value
    216     this.keysByValue = function(_value) {
    217         var arr = new Array();
    218         for (i = 0; i < this.elements.length; i++) {
    219             if(_value == this.elements[i].value){
    220                 arr.push(this.elements[i].key);
    221             }
    222         }
    223         return arr;
    224     };
    225     
    226     //获取MAP中所有KEY的数组(ARRAY)key有相同的 取出的key为去重后的 数组里去重后的key的数组
    227     this.keysRemoveDuplicate = function() {
    228         var arr = new Array();
    229         for (i = 0; i < this.elements.length; i++) {
    230             var flag = true;
    231             for(var j=0;j<arr.length;j++){
    232                 if(arr[j] == this.elements[i].key){
    233                     flag = false;
    234                     break;
    235                 } 
    236             }
    237             if(flag){
    238                 arr.push(this.elements[i].key);
    239             }
    240         }
    241         return arr;
    242     };
    243 }

    1、filter:把符合条件的数组项返回,形成一个数组

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result = arrayObj.filter(function(item,index,array){
           return item > 7;
     });//[15,9,10]

    2、map:利用某规则映射得到一个新数组

    1
    2
    3
    4
    var arrayObj = [15,3,2];
    var result = arrayObj.map(function(item, index, array){
         return 2*item;
    });//[30,6,4]

      3、forEach:遍历数组,只是遍历,没有返回值,相当于for循环

    1
    2
    3
    4
    var arrayObj = [15,3,2];
    arrayObj.forEach(function(item, index, array){
        ……
    });

    4、every:数组中所有元素都满足满足条件,就返回true;有一个为false,就为false

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result =arrayObj.every(function(item,index,array){
          return item > 1 ;   
    });//false

    5、some:数组中部分元素满足条件,返回true;有一个为true,就为true

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result =arrayObj.some(function(item,index,array){
         return item > 10;
    });//true

    声明数组:

    let list = new Array()

    list[0] = 0;

    list[1] = 1;

    list[2] = 2;

    或者这样声明:let list = [0,1,2]

    或者let d = Array.of(1,2,3);      console.log(d)       [1,2,3]

    (1)基本的数组方法

    unshift:向数组开头增加一项 ,返回值是数组的新长度 , 直接在原数组上操作的,不生成新数组

    push:向数组的末尾增加一项 ,返回值是数组的新长度 , 直接在原数组上操作的,不生成新数组

    shift : 删除数组开头项 ,返回被删除的项 ,直接在原数组上操作的,不生成新数组

    pop : 删除数组的末尾项, 返回被删除的项 ,直接在原数组上操作的,不生成新数组

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

    indexof  

    var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

         console.log(beasts.indexOf('bison'));

        // expected output: 1

        // start from index 2

         console.log(beasts.indexOf('bison', 2));

        // expected output: 4

        console.log(beasts.indexOf('giraffe'));

       // expected output: -1

    splice(2,3) :从下标为2(包含2)的项开始切取3项;如果只传一个参数那就是切到最后  

    splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,... (切除并插值)

               直接在原数组上操作的,返回值是切下的元素新组成的数组

    var a = [1,2,3,4,5,6,7,8];                              var a = [1,2,3,4,5,6,7,8];                                   var a = [1,2,3,4,5,6,7,8];

    var b = a.splice(2,3);                                   var b = a.splice(2,3,9,10);                                 var b = a.splice(2);

    console.log(a)        [1,2,6,7,8]                     console.log(a)        [1,2,9,10,6,7,8]                   console.log(a)        [1,2]

    console.log(b)        [3,4,5]                           console.log(b)        [3,4,5]                                 console.log(b)  [3,4,5,6,7,8]

    slice (2,4):从下标为2(包含2)的项开始切,直到下标为4停止(不包含4),如果只传一个参数那就是切到最后

                原数组不变,返回值是切下的元素新组成的数组

    var a = [1,2,3,4,5,6,7,8];                                                                      var a = [1,2,3,4,5,6,7,8];

    var b = a.slice(2,4);                                                                           var b = a.slice(2);

    console.log(a)        [1,2,3,4,5,6,7,8]                                                 console.log(a)        [1,2,3,4,5,6,7,8]

    console.log(b)        [3,4]                                                                   console.log(b)        [3,4,5,6,7,8]

    concat:把一个数组和另一个数组拼接在一起 返回拼接好的数组        原数组不变,返回新的数组

    var a = [1,2,3,4,5,6,7,8];

    var b = [9,10,11];

    var c = a.concat(b);

    console.log(a)                    [1,2,3,4,5,6,7,8]

    console.log(b)                    [9,10,11]

    console.log(c)                    [1,2,3,4,5,6,7,8,9,10,11]

    join: 把数组中的每一项 按照指定的分隔符拼接成字符串

              原数组不变,返回新的数组

    var a = [1,2,3,4,5,6,7,8];                                                                      var a = [1,2,3,4,5,6,7,8];

    var c = a.join('');                                                                                    var c = a.join('|');

    console.log(a)                    [1,2,3,4,5,6,7,8]                                        console.log(a)                    [1,2,3,4,5,6,7,8]

    console.log(c)                    12345678                                                  console.log(c)                    1|2|3|4|5|6|7|8

    reverse:将数组反序

          原数组改变,返回新的数组就是反序后的数组

    var a = [1,2,3,4,5];

    var b = a.reverse();

    console.log(a)     [5,4,3,2,1] 

    console.log(b)      [5,4,3,2,1]

    toString: 可把数组转换为字符串,并返回结果

    var a = [1,2,3,4,5];

    var b = a.toString();

    console.log(a)      [1,2,3,4,5]

    console.log(b)      1,2,3,4,5

    sort(orderfunction):方法将数组中的元素排序并返回排序后的数组

           原数组也改变,返回重新排序后的新数组

    var a = [9,2,4,3,5,8,7,6];

    var c = a.sort();

    console.log(a)      [2, 3, 4, 5, 6, 7, 8, 9]

    console.log(c)      [2, 3, 4, 5, 6, 7, 8, 9]

    当不带参数时,默认按照顺序排序,也就是从小到大。当然,也可以直接给sort加一个比较函数比较

    var    arr = [1,4,7];

    arr.sort();

    console.log(arr);//[1,4,7]

    arr.sort(function(a,b){

             returna-b;//从小到大

    });

    console.log(arr);//[1,4,7]

    arr.sort(function(a,b){

              returnb-a;//从大到小

    });

    console.log(arr);//[7,4,1]

    varnum =newArray('one','three','Six','Five');

    num.sort();//区分大小写排序

    console.log(num);// ["Five", "Six", "one", "three"]

    num.sort(function(s,t){

             vara = s.toLowerCase();

             varb = t.toLowerCase();

             if(a<b) return  -1

             if(a>b) return 1;

              return0;

    });

    console.log(num);// ["Five", "one", "Six", "three"]

    2)ECMAScript5中的数组方法

    这一类数组方法大多数有统一大致的规则。它们都不会修改原始数组。

    大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一些元素)调用一次该函数。

    如果是稀疏数组,对不存在的元素不调用传递的函数;

    在大多数情况下,调用的这个函数一般使用三个参数:数组元素、元素的索引、数组本身。通常后两个参数也不需要填写进去。

    除了这里第一个参数(函数)之外,还有第二个参数(它是可选的),如果第二个参数存在,则调用的函数将被看做是第二个参数的方法。

    也就是说,在调用函数时传递进去的第二个参数作为它的this关键字的值来使用。

    1.forEach()

    这个方法从头至尾遍历数组,为每个数组调用指定的函数。

    var  data = [1,2,3,4,5];

    var  sum = 0;

    data.forEach(function(value){//只使用了第一个参数(函数),调用的函数也只使用了第一个参数数组元素

             sum += value;

    });

    console.log(sum);          //15

    console.log(data);          // [1, 2, 3, 4, 5]

    var   data = [1,2,3,4,5];

    var   sum = 0;

    data.forEach(function(value,item,data){//调用的函数具有了三个参数

            data[item] = value*value;//取平方

    });

    console.log(data);        // [1, 4, 9, 16, 25]

    2.map()

    这个方法将调用的数组中每个元素传递给指定的函数,并返回一个数组,它包含这个函数的返回值。

    var    data = [1,2,3,4,5];

    var    data1 = data.map(function(value){

            return++ value;

    });

    console.log(data);          // [1, 2, 3, 4, 5]

    console.log(data1);        // [2, 3, 4, 5, 6]

    3.filter()

    这个方法返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的,该函数返回true或false。

    如果返回值是true或者能转化为true的值,那么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中。

    var    data = [1,2,3,4,5];

    var    data1 = data.filter(function(value){

            returnvalue <= 3;

    });

    vardata2 = data.filter(function(value){

            returnvalue > 3;

    });

    console.log(data);          // [1, 2, 3, 4, 5]

    console.log(data1);        // [1,2,3]

    console.log(data2);        // [4,5]

    4.every()和some()

    顾名思义,every()就是数组中所以元素都满足函数指定的条件时 返回true; some()就是某一项满足时就返回 true

    var    data = [1,2,3,4,5];

    var    data1 = data.every(function(value){

            returnvalue < 4;

    });

    var    data2 = data.some(function(value){

            returnvalue >4;

    });

    console.log(data);        // [1, 2, 3, 4, 5]

    console.log(data1);      // false

    console.log(data2);      // true

    5.reduce()和reduceRight()

    这两个方法使用指定的函数将数组元素进行组合,生成单个值。

    reduce()有两个参数。第一个是执行化简操作的函数,就是说用某种方法把两个值化简为一个值,并返回化简后的值。

    第二个参数可选,用来传递给第一个参数函数作为初始值。如果第二个参数没有,则初始值就使用数组的第一个元素值。

    var    data = [1,2,3,4,5];

    var    sum = data.reduce(function(a,b){

            returna+b;

    });

    varsum1 = data.reduce(function(a,b){

            returna+b;

    },5);

    var    min = data.reduce(function(a,b){

            return(a

    });

    console.log(data);          // [1, 2, 3, 4, 5]

    console.log(sum);          // 15

    console.log(sum1);        // 20

    console.log(min);// 1

    sum中没有第二个参数,所以初始值为第一个数组元素,第一步1+2=3,第二步3+3=6... 最后得15

    sum1中有第二个参数,所以初始值为5,第一步5+1=6,第二步6+2=8... 最后得20

    reduceRight()和reduce()差不多,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是正常的从低到高。

    var    data = ['a','b','c'];

    var    str = data.reduce(function(x,y){//顺序

            returnx+y;

    });

    var    str1 = data.reduceRight(function(x,y){//逆序

            returnx+y;

    });

    console.log(data);        // [1, 2, 3]

    console.log(str);           //"abc"

    console.log(str1);         //"cba"

    6.indexOf()和lastIndexOf()

    这个方法搜索整个数组中具有给定值的元素,返回找到的元素的索引(找到了一个就退出了),没有找到则返回-1.

    一个从头至尾,一个从尾至头

    var    data = ['a','b','a','c','a'];

    console.log(data.indexOf('a'));                             //0

    console.log(data.indexOf('d'));                             //-1

    console.log(data.lastIndexOf('a'));                       //4

    console.log(data.lastIndexOf('a',-2));                   //2 从倒数第二个开始

    console.log(data.lastIndexOf('a',1));                    //0  从顺序第二个往前

    7.数组类型 isArray()

    判断一个对象是不是数组

    console.log(Array.isArray([]));                     //true

    console.log(Array.isArray({}));                    //false

    //模拟上边的

    varisArray1 = Function.isArray||function(o){

            returntypeofo ==="object"&&

            Object.prototype.toString.call(o) ==="[object Array]";

    };

    console.log(isArray1([]));                       //true

    console.log(isArray1({}));                      //false

    8.数组includes()

    判断数组是否包含某个元素,如果包含则返回true,不包含返回false

    var a = [9,2,4,3,5,6,7,8];

    var c = a.includes(3);

    console.log(a)                  [9,2,4,3,5,6,7,8]       

    console.log(c)                   true

    9.数组find()

    Array.find(function(v,i,arr),thisArgs}

    数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。

    v:数组值

    i:索引

    arr:当前数组

    thisArgs:fn函数中this指向

    var  re = [1,2,3,4].find(function(v,i,arr){

            console.log(arr);                    //[1,2,3,4]

            console.log(this);                  //{this: 'this'}

            returnv>=2;

    },{this:'this'})

    console.log(re);                             //2

    var  re2 = [1,2,3,4].find(function(v,i,arr){

         console.log(this);                    //{0: "_", 1: "t", 2: "h", 3: "i", 4: "s", length: 5}

         returnv>=10;

    },'_this')

    console.log(re2);                          //undefined

     

    Object

    obj= {

            "aa" :  123,

            "bb" :   564,

            "cc" :   989

    }

    var  keysArr = Object.keys(obj)        //返回一个包含对象key值的数组

    console.log(keysArr)             //   ['aa' , 'bb' ,'cc']

     

     
    循环对象


    作者:hk_sky
    链接:https://www.jianshu.com/p/f55912c20cf1
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

     

    数组处理方法总结(操作方法)

     
     

    数组常用的方法filter、map、forEach、every、some

     

    1、filter:把符合条件的数组项返回,形成一个数组

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result = arrayObj.filter(function(item,index,array){
           return item > 7;
     });//[15,9,10]

    2、map:利用某规则映射得到一个新数组

    1
    2
    3
    4
    var arrayObj = [15,3,2];
    var result = arrayObj.map(function(item, index, array){
         return 2*item;
    });//[30,6,4]

      3、forEach:遍历数组,只是遍历,没有返回值,相当于for循环

    1
    2
    3
    4
    var arrayObj = [15,3,2];
    arrayObj.forEach(function(item, index, array){
        ……
    });

    4、every:数组中所有元素都满足满足条件,就返回true;有一个为false,就为false

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result =arrayObj.every(function(item,index,array){
          return item > 1 ;   
    });//false

    5、some:数组中部分元素满足条件,返回true;有一个为true,就为true

    1
    2
    3
    4
    var arrayObj = [15,3,2,6,7,1,9,10];
    var result =arrayObj.some(function(item,index,array){
         return item > 10;
    });//true
    
    
  • 相关阅读:
    麦肯锡 问题分析与解决技巧
    JavaSe_IO流总结
    tcpdump
    interface
    phpexcel 合并单元格后的动态行高
    分布式事务锁的实现
    IntelliJ IDEA 实用快捷键
    Redis安装教程
    ng new my-app创建angular项目是卡住的解决办法
    SqlYog无法连接mysql数据库(包括docker环境)的解决方法
  • 原文地址:https://www.cnblogs.com/bgml/p/11391795.html
Copyright © 2020-2023  润新知