如何将带参数的函数本身作为参数传递,实现JS数据查询相关工具函数
JavaScript 实现结构化对象列表查询功能
你遇到的核心问题是需要给处理函数预传参数,只需要把select、field_filter实现为高阶函数即可:调用时先接收配置参数,返回一个实际处理数组的闭包,就能匹配你想要的调用形式。
完整实现代码如下:
const friends = [ {'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'}, {'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'}, ] // 查询主函数 const query = function(arr, ...handlers) { let current = arr for (const handler of handlers) { // 绑定当前数组为this执行处理函数,更新当前结果 current = handler.call(current) } return current } // 选择指定字段的高阶函数 const select = function(...fields) { // 返回实际处理数组的闭包 return function() { return this.map(item => { const newItem = {} fields.forEach(field => newItem[field] = item[field]) return newItem }) } } // 字段过滤的高阶函数 const field_filter = function(field, ...allowedValues) { // 返回实际处理数组的闭包 return function() { return this.filter(item => allowedValues.includes(item[field])) } }
测试运行:
const result = query( friends, select('name', 'gender', 'sport'), field_filter('sport', ...['Basketball', 'volleyball']), field_filter('gender', ...['male']) ) console.log(result) // 输出:[ { name: 'Sam', gender: 'male', sport: 'Basketball' } ]
内容的提问来源于stack exchange,提问作者Jordan Suomi
相关产品推荐
相关产品推荐

