【笔记】js数组相关方法,持续更新(reduce、includes、every、map等),两个数组根据指定项过滤

1、reduce

参数:

prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;
cur 必需。表示当前正在处理的数组元素;
index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为- 0,否则起始索引为1;
arr 可选。表示原数组;
init 可选。表示初始值。

reduce–求数组的和,阶乘,乘积(从左往右),prev表示前两个值的和(没有定义初始值时为第一个值),next为后一个值

    fundChange(val) {
      if (val.length > 0){
        let fundlVal = val.map(item => item.TotalPrice)
        let sumfundVal = fundlVal.reduce(function (prev, next) {
          return Number(prev) + Number(next);
        })
        this.$set(this.formData,'fundTotal',sumfundVal)
      }else {
        this.$set(this.formData,'fundTotal',0)
      }
    },

reduce当参数init设为 [], 代表初始值是数组

 let handleCode = this.list
          .reduce((arr, obj) => {
            if (obj.code) {
              arr.push(obj.code)
            }
            return arr
          }, [])
          .join(',')
        this.$set(this.form, 'code', handleCode)

2.includes
includes–判断数组中是否包含一个指定的值

  isEdit() {
        let flag = Object.keys(this.modelDict).includes(`${this.modelString}`);
        return flag;
      }
this.iconList = this.iconList.filter(item => item.includes(this.name))

3、every
every–找到符合条件的值会继续执行,如果每个值都满足条件才会返回true,否则就是false。

示例解读:every返回布尔值,filter过滤布尔值为true的项,用在弹窗列表,每次打开弹窗勾选项,再次打开弹窗勾选过的项会被过滤到,保留未被勾选过的项。

 this.Carr = this.Aarr.filter((item) =>
      this.Barr.every((v) => item.Code !== v.Code)
    );

改用includes也可以

  this.Carr  = this.Aarr.filter(
        (item) => !this.Barr.includes(item)
      );

    this.Carr  = this.filterArr(this.Aarr, this.Barr);
     filterArr(a, b) {
      return a.filter((e) => !b.includes(e));
    },

4、map映射
当我们要从一个数组里,从每项里拿指定的字段出来,重新放到一个新的数组里
常规写法如下,这样写,执行效率低

       let Arr = [];
        this.gentList.forEach((item) => {
          let Obj = {
            cityName: item.CityName,
            standValue: item.expExtend,
          };
          Arr.push(Obj);
        });

用map映射,这样写,写法简单执行效率高

  let Arr=  this.gentList.map((item) => {
        return {
            cityName: item.CityName,
            standValue: item.expExtend,
          };       
        });

如果只要一项,不需要return

filter+includes+map
两个数组,原数组及选中值的数组,根据选中的id到原数组里过滤,然后取指定字段的值
比如原数组arr1 = [{id:‘x1’,name:‘aa’},{id:‘x2’,name:‘bb’},{id:‘x3’,name:‘cc’},{id:‘x4’,name:‘dd’},{id:‘x5’,name:‘ee’},]
选中数组只有id,arr2= [‘x1’,‘xb’]
但是我想要的是 arr3 = [‘aa’,''bb]
其实就是根据id找指定项

const arr3 = arr1.filter(item=>arr2.includes(item.id)).
                  map(v=>{
					return v.name
                  })

还有个方法就是双重forEach,性能没上面的好

const arr3 =[]
arr1.forEach(item=>{
arr2.forEach(v=>{
if(v==item.id){
arr3.push(item.name)
}})
})

如果只想要id所在的对象,一行代码即可

const arr3 = arr1.filter(item=>arr2.includes(item.id))
             
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值