filter用于对数组进行过滤。
它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意:filter()不会对空数组进行检测、不会改变原始数组
例子1:
var arr = [3,9,4,3,6,0,9]; // 返回数组nums中所有大于5的元素。
var newArr = arr .filter(function (item) {
return item >5
});
console.log(newArr )
项目中:假设 我们操作了某个按钮获取到整个数据,在执行过滤,调取另一个接口
let detailTableValues = res.data.tmInquiryDRespVOS; // 后端返回明细数组
var newArr = detailTableValues.filter(function (item) {
return item.lineStatus == 'AGREED'; // 过滤出来数组中单据状态为:已议定的
});
// console.log(newArr); 集合成新的数组,并对新数组进行处理
detailTableValues = newArr.map((item) => {
console.log(item);
return {
...item,
inquiryDId: item.id
};
});
let paramstotal = {
inquiryDocType: 'NONSTANDARD',
tmComparisonDSaveVOS: detailTableValues // 详情明细行id
};
console.log(paramstotal);
const res1 = await service.comparative(paramstotal);
if (res1.success) {
ElNotification({ type: 'success', message: res1.msg });
this.tableRef.getTableData();
} else {
ElNotification({
type: 'error',
message: res1.msg || res1.data || '操作失败!'
});
}
案例2 :数组去重
var r = arr.filter(function (element, index, self) {
return self.indexOf(element) == index;
});
去除重复元素依靠的是indexOf总是返回第一个元素的位置,
后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。
案例3 :根据数组对象中的id作比较,id相同的去掉。这种方法只会保留 id 第一个出现的数组
var arr = [
{id: 1, name: 'sli', year: 2012},
{id: 2, name: 'ap', year: 2015},
{id: 1, name: 'alslion', year: 2012},
{id: 3, name: 'pose', year: 2012},
]
//删除arr中的重复对象
var newArr= [];
var arrId = [];
for(var item of arr){
if(arrId.indexOf(item['id']) == -1){
arrId.push(item['id']);
newArr.push(item);
}
}
console.log(arrId,newArr);
案例 4 :数组对象完全相同的去除
function delObj(obj) {
var uniques = [];
var stringify = {};
for (var i = 0; i < obj.length; i++) {
var keys = Object.keys(obj[i]);
keys.sort(function(a, b) {
return (Number(a) - Number(b));
});
var str = '';
for (var j = 0; j < keys.length; j++) {
str += JSON.stringify(keys[j]);
str += JSON.stringify(obj[i][keys[j]]);
}
if (!stringify.hasOwnProperty(str)) {
uniques.push(obj[i]);
stringify[str] = true;
}
}
uniques = uniques;
return uniques;
}
var arr = [
{name:'uzi',color:'blue'},
{name:'pdd',color:'white'},
{name:'mlxg',color:'orange'},
{name:'uzi',color:'blue'},
]
console.log('arr:',delObj(arr))
var arr1 = [
{name:'uzi',color:'blue'},
{name:'pdd',color:'white'},
{name:'mlxg',color:'orange'},
{name:'uzi',color:'red'},
]
console.log('arr1:',delObj(arr1))