js 数组对象的求和、过滤、多重排序的方法封装
2018-01-13 16:26
627 查看
在做数据报表和后台管理系统开发的过程中,经常会遇到对拿到的数据再进行求和以及过滤的操作,其实实现它们并不难,只是多个页面都要进行这些操作的话,再一点一点的去写,好麻烦的。当一些代码重复率太高的时候,就要考虑优化了。封装成方法,在用的时候去调用,这才是正确的选择。
求和
过滤
多重排序(按照多个字段同时排序)
求和
// 第一个参数是要求和的数组对象,后面是要求和的字段(不定项),如果要求和的字段值是字符串也做了相应转换 function obj_sum(arr, ...param) { var temp = {}; arr.forEach(function(item, index) { for(var k in item) { if(param.indexOf(k) >= 0) { if((typeof item[k]) == 'string'){ item[k] = item[k]*1 } if(temp[k]) { temp[k] += item[k]; } else { temp[k] = item[k]; } } } }); return temp; }; // 以下是测试数据 var arr = [ { "adslot_id": 16, "request": '1234567', "served_request": 12345, "impression": 1234, "click": '234', "income": 34, "app_income": 30 }, { "adslot_id": 17, "request": '2345678', "served_request": 23456, "impression": 2345, "click": 345, "income": 45, "app_income": 40 }, { "adslot_id": 18, "request": '3456789', "served_request": 34567, "impression": 4567, "click": '567', "income": 67, "app_income": 60 } ]; // 以下就可得到相应一些字段的求和结果 console.log(obj_sum(arr,'request','served_request','click','app_income','income'));
过滤
// 第一个参数是要筛选的数据,第二个参数是筛选值,后面是筛选的字段 function obj_filter(data, v, ...k){ let key = (v || '').trim(); let keyLength = key.length; let keyMatcher = new RegExp(key, 'i'); if(keyLength) { data = data.filter(res =>{ let flag = false; for(var item of k) { flag = keyMatcher.test(res[item]); if(flag) break; } return flag; }) } return data; } // 测试方法同上
多重排序(按照多个字段同时排序)
// 前两个参数是sort方法的两个参数,第三个参数可有可无,为排序属性,即要排序的字段和排序的方向;如果第三个字段为空,则按照全属性升序排序 function obj_sort(item1,item2) { // "use strict"; var props = []; for (var _i = 2; _i < arguments.length; _i++) { props[_i - 2] = arguments[_i]; } var cps = []; // 存储排序属性比较结果。 // 如果未指定排序属性,则按照全属性升序排序。 var asc = true; if (props.length < 1) { for (var p in item1) { if (item1[p] > item2[p]) { cps.push(1); break; // 大于时跳出循环。 } else if (item1[p] == 4000 = item2[p]) { cps.push(0); } else { cps.push(-1); break; // 小于时跳出循环。 } } } else { for (var i = 0; i < props.length; i++) { var prop = props[i]; for (var o in prop) { asc = prop[o] === "ascending" ? 1 : -1; if (item1[o] > item2[o]) { return asc; } else if (item1[o] < item2[o]) { return -asc; } } } return 0; } for (var j = 0; j < cps.length; j++) { if (cps[j] === 1 || cps[j] === -1) { return cps[j]; } } return false; }; // 测试数据 var arr = [ { "adslot_id": 16, "request": '1234567', "served_request": 12345, "impression": 1234, "click": '234', "income": 50, "app_income": 30 }, { "adslot_id": 17, "request": '1234567', "served_request": 23456, "impression": 2345, "click": 345, "income": 45, "app_income": 40 }, { "adslot_id": 18, "request": '2456789', "served_request": 34567, "impression": 4567, "click": '567', "income": 50, "app_income": 60 } ]; let obj ={ "request": 'ascending', "income": 'ascending'}; let obj1 ={ "request": 'ascending', "income": 'ascending', "app_income": 'descending'}; console.log( arr.sort(function(a,b){ return obj_sort(a,b,obj) }) ) console.log( arr.sort(function(a,b){ return obj_sort(a,b,obj1) }) )
相关文章推荐
- js sort方法根据数组中对象的某一个属性值进行排序
- js sort方法根据数组中对象的某一个属性值进行排序
- js sort方法根据数组中对象的某一个属性值进行排序
- js sort方法根据数组中对象的某一个属性值进行排序
- js使用sort()对数组对象排序的方法
- js sort方法根据数组中对象的某一个属性值进行排序
- JS 实现 创建类、继承、方法添加、对象克隆、数组封装操作
- js sort方法根据数组中对象的某一个属性值进行排序
- js使用Array.prototype.sort()对数组对象排序的方法
- js使用Array.prototype.sort()对数组对象排序的方法
- js数组对象排序
- js中那些方法不改变原来的数组对象
- js对象数组排序
- 封装一个方法实现js内置对象array的indexOf()方法
- JS数组排序方法实例分析
- 一个关于传参数js数组的封装方法(寄生模式)
- js实现的对象数组根据对象的键值进行排序代码
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个Student类型的对象数组,对学号进行 升序排序并输出。
- js删除对象的属性及封装方法
- js对象中封装方法