iView Table自定义过滤规则动态更改表格中得数据,比如时间、数量
有个数据展示页面,后端只返回最原始数据,其余的都是我个前端仔进行换算,比如利润、利润率、占比啥的,但这不算什么,连时间、数量、等过滤条件都是前端来处理,刚接到这个需求,心里就在想,这些过滤不都是前端带参数去后端查询么,然后就去问后端,后端说就你前端处理把,因为你处理和我后端处理是一样得,我当时就纳闷了,(我脑海中马上闪现我那快忘光得 脱毛得皮毛 SQL
,不就是 where 条件么
,这不比我前端快多了)然后后端和我交流了一通,然后我败下阵了
根据上面筛选条件更新 iView Table
数据
思路:
- 获取表格中得原始数据
- 根据不同条件去过滤原始数据(在这里脑子一下子没转过弯来,在想这么多得筛选条件
if else
不得写哭去,最后发现我好蠢,continue
他不香么)
let len = this.Data.length;
let list = [];
for (let item = 0; item < len; item++) {
let diffValue = now - this.Data[item].turnoverTime;
if (time != "All") {
if (!(diffValue / hour < time)) {
continue;
}
}
if (side != "All") {
if (side != this.Data[item].side) {
continue;
}
}
if (num != "All") {
if (Math.abs(this.Data[item].qty) < num) {
continue;
}
}
if (country != "All") {
if (Number(country) != this.Data[item].channelId) {
continue;
}
}
list.push(this.positionData[item]);
es6 ⇒ map
用得太多都忘记使用for
了
区别:
- map()返回一个新数组,原数组不会改变。
- 没有办法终止或者跳出forEach()循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用Array.every()或者Array.some();
["1", "2", "3"].map(parseInt); //结果 [1, NaN, NaN]
如果想得到[1, 2,3]应该这么做
function returnInt(element){
return parseInt(element,10);
}
["1", "2", "3"].map(returnInt);
这主要是因为 parseInt()默认有两个参数,第二个参数是进制数。当parsrInt没有传入参数的时候,而map()中的回调函数时候,会给它传三个参数,第二个参数就是索引,明显不正确,所以返回NaN了。