js数组的map方法和filter方法

Map方法

方法定义与说明

js中的map方法配合箭头函数,能够减少很多代码量,而且代码看起来也会更加清晰简洁(ie9+)

map方法的主要作用是,根据原数组生成一个新的数组,并且不会修改原数组

使用语法是array.map(function(currentValue, index, arr), thisValue)

  • currentValue 必填项 当前元素的值
  • index 当前元素索引值
  • arr 原数组 当然一般由currentValue这个较少用到
  • thisValue 可选 较少用到 官方说法:对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
    如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。

举例查看方法对代码的优化

举例,有一个对象数组,数组中的每个元素都包含id name age3个字段,现在我们只需要获取id字段组成新数组
如果不用map方法需要这样写

var oldArr=[
  {id:1,name:'Paul',age:22},
    {id:2,name:'Mary',age:21},
];
var idArr=[];
for(var i=0;i<oldArr.length;i++){
    idArr.push(oldArr[i].id);
}
console.log(idArr.valueOf());//[1,2]

使用map方法是这样的

var oldArr=[
    {id:1,name:'Paul',age:22},
    {id:2,name:'Mary',age:21},
];
var idArr=oldArr.map(function(item){
    return item.id;
});
//使用箭头函数更简单 当然箭头函数要考虑兼容性问题 使用babel等
//let idArr=oldArr.map(item=>{return item.id});
console.log(idArr.valueOf());//[1,2]

甚至可以省略return

let oldArr=[1,2,3];
let newArr=oldArr.map(item=>item*2);
console.log(newArr.valueOf());//[2,4,6]

尤其是使用箭头函数配合map方法使用,可以减少不少的代码量
不适用map方法要先定义新数组,循环旧数组,根据规则修改数组再push到新数组
而map方法配合箭头函数,使用极少的代码量就可以完成

常见使用方式

当然前端经常会有需求,将普通的数组构造成一个对象数组来满足接口的要求,因为多项选择框的model绑定值一般都是普通数组,这时候用map就很方便

let oldArr=[1,2];
let newArr=oldArr.map((item,index)=>({
    id:item,
    index:index,
    name:''
}));
console.log(newArr.valueOf());
//[{id:1,index:0,name:""},{id:2,index:1,name:""}]

预先定义处理函数

查看map方法的定义就知道,我们也可以预先定义好处理的函数方法,实现方法共用
要注意处理函数的参数!

let oldArr=[1,2];
let myMethod=function(item){
  return item*2;
};
let newArr=oldArr.map(myMethod);
console.log(newArr.valueOf());//[2,4]

Filter方法

filter方法用于根据一定的过滤条件,删选原数组的数据,形成一个新的数组(不会修改原数组)

语法是array.filter(function(currentValue, index, arr), thisValue)
参数同map方法
区别是map的function是用来返回新的条目值,而filter的function是返回true/false来进行判断筛选

filter方法可以在后台获取到下拉列表的数据之后,比如因为级联选择要修改下拉列表的内容显示,
可以考虑使用filter方法来过滤数据,减少后台请求。

示例代码

let oldArr=[
    {
        id:11,
        name:'Peter',
        parentId:1
    },
    {
        id:13,
        name:'Paul',
        parentId:2
    },
    {
        id:12,
        name:'Mary',
        parentId:2
    }
];
let myMethod=function(item){
      return item.parentId===2;
};
let newArr=oldArr.filter(myMethod);
console.log(newArr.valueOf());//得到的新数组是parentId为2的两个项目组成

更多数组方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值