由于一直在快速的迭代重构,为尽快实现预想的功能,代码有些凌乱,且没有注释……。但已经过较为全面的测试,可用性方面是没有问题的。后续会集中精力优化代码架构和性能。
以下是代码全貌,其中moduleDataFinder为功能入口函数,传入原始数据和数据筛选器对象,返回筛选结果数据。代码判断Array类型时,使用了jQuery的部分特性,可以进行简单的修改排除对jQuery的依赖。
function filterArrayData (data, key, value) { var proceedData = []; for (var i = 0; i < data.length; i++) { if ($.isArray(data[i])) { var newArr = []; for (var j = 0; j < data[i].length; j++) { newArr = filterArrayData(data[i], key, value); } proceedData.push(newArr); } else { if (data[i].hasOwnProperty(key)) { if (data[i][key] == value) { proceedData.push(data[i]); } } } } return proceedData; }; function sortArrayData (data, key) { var proceedData; var desc = false; var sortKey = key; if (key.substr(0, 1) === '!') { sortKey = key.substr(1); desc = true; } proceedData = data.slice(0); proceedData.sort(function (a, b) { if (sortKey.length) return (a[sortKey] < b[sortKey]) ^ desc ? -1 : 1; else return (a < b) ^ desc ? -1 : 1; }); return proceedData; }; var isArray = Array.isArray || function (obj) { return jQuery.type(obj) === "array"; }; function moduleDataFinder (data, bindFinder) { var proceedData = null; if (isArray(bindFinder)) { var newFinder = []; var arrProcess = []; for (var i = 0; i < bindFinder.length; i++) { if (typeof(bindFinder[i]) === "string") { newFinder.push(bindFinder[i]); } else if (isArray(bindFinder[i])) {
一个JavaScript数据筛选器(四)——实现代码
最新推荐文章于 2022-09-26 14:10:28 发布