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))