数组方法总结 常用数组方法总结 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

posted @ 2019-08-21 22:59  wen521  阅读(395)  评论(0编辑  收藏  举报