ES5中的数组方法

forEach方法

var person = [

  {

     "name" : "张三",

      "sex" :  0 ,

      "age" : 18

    },

  {

     "name" : "李四",

      "sex" :  0 ,

      "age" : 20

    },

  {

     "name" : "王五",

      "sex" :  1 ,

      "age" : 19

    },

]

<ul>

    <li></li>

    <li></li>

    <li></li>

    <li></li>

</ul>

forEach(callback,[obj])

callback中5接收了三个参数  运行几次决定于arr的length

obj j决定了callback中的this指向

person.forEach(function(ele,index,self){

console.log(ele,index,self,this)

})

person.forEach(function(ele,index,self){

console.log(ele,index,self,this)

this[index].innerHTML = ele.name;

},document.getElementsByTagName("li"))

自定义封装数组方法:

Array.prototype.myForEach = function(fun){

var _arr = this;

var len = _arr.length;

var param2 = arguments[1] || window;

for(var i = 0;i < len;i++){

// fun.call(param2,_arr[i],i,_arr)

fun.apply(param2,[_arr[i],i,_arr])

}

}

personArr.myForEach(function(ele,index,self){

console.log(ele,index,self,this)

this[index].innerHTML = ele.name;

},document.getElementsByTagName("li"))

filter方法  过滤

person.filter(callback,object)

返回一个新的数组,callback返回值如果为true,就会在新数组中,false,就不存在

var  newArr = person.filter(function(ele,index,self,this){

    console.log(ele,index,self,this);

     return true;

     if(ele.sex == 0){

       return true ;

        else{

      return false;

     }

      return ele.sex ==1;

     },{

      name : "hh"

    })

自定义封装方法

Array.prototype.myFilter = function(fun){

var _arr = this;

var len = _arr.length;

var param2 = arguments[1] || window;

var newArr = [];

for(var i = 0;i < len;i++){

fun.apply(param2,[_arr[i],i,_arr]) ? newArr.push(_arr[i]) : "";

}

return newArr;


var newArr = personArr.myFilter(function(ele,index,self){

return ele.sex == 0;

},{

name : "hh"

})

console.log(newArr);

map方法  映射

map返回一个新的数组

var  newArr = person.map(function(ele,index,self){

  console.log(ele,index,self,this)

  return 10;

  return ele.name + 10;

  ele.name += 10;

  return ele

  },{

  name : "hh"

   })

     console.log(newArr);

自定义封装数组方法:

Array.prototype.myMap = function(fun){

var _arr = this;

var len = _arr.length;

var param2 = arguments[1] || window;

var newArr = [];

for(var i = 0;i < len;i++){

newArr.push( fun.apply(param2,[_arr[i],i,_arr]) ); //深克隆加进去

}

return newArr;

}

var newArr = personArr.myMap(function(ele,index,self){

ele.name += 10;

return ele

},{

name : "hh"

})

console.log(newArr)

every方法 :

返回一个boolean

var flag = personArr.every(function(ele,index,self){

console.log(ele,index,self,this);

 return false;

return ele.age > 15;

 }, {

 name : "psh"

})

 console.log(flag)

自定义封装数组方法:

Array.prototype.myEvery = function(fun){

var _arr = this;

var len = _arr.length;

var param2 = arguments[1] || window;

var flag = true;

for(var i = 0;i < len;i++){

if(!fun.apply(param2,[_arr[i],i,_arr])){

flag = false;

break;

}

}

return flag;

}

var flag = personArr.myEvery(function(ele,index,self){

console.log(ele,index,self,this);

return ele.age > 10;

}, {

name : "psh"

})

console.log(flag)

    

原文地址:https://www.cnblogs.com/hyh888/p/11820592.html