【发布时间】:2021-10-08 17:07:43
【问题描述】:
我有一个像这样的对象列表:
friends = [
{'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'},
{'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'},
]
我需要创建函数“query”、“select”和“field_filter”来处理这些列表。所有这些都应该看起来像这样:
»> result = query(
friends,
select('name', 'gender', 'sport'),
field_filter('sport', *('Basketball', 'volleyball')),
field_filter('gender', *('male',)),
)
»> result
[{'gender': 'male', 'name': 'Sam', 'sport': 'Basketball'}]
我的想法是创建一个查询函数,它接受一个数组和...函数作为参数,并使用一个数组作为 this 上下文调用这个函数。当我按原样传递函数(即不带参数)时,我设法做到了这一点,但正如您所见,它应该通过 with 参数传递
目前我的代码如下所示:
let friends = [
{'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'},
{'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'},
]
const query = function(arr, ...funcs) {
for (i of funcs) {
i.call(arr)
}
}
const select = function(...args) {
console.log(this)
}
query(friends, select, select, select)
附:最初这个任务是针对 python 的,但我想在 JS 上完成它
【问题讨论】:
-
function.call的第一个参数是函数的this值,这就是你的调用失败的原因......你可以只做i(arr)或i.call(null, arr)或 @987654328 @ 或i.apply(null, arr)- 后两个将调用函数,将朋友的元素作为单独的参数 - 前两个将调用函数,数组作为唯一参数 -
刚刚注意到 - 你
console.log(this)应该输出朋友数组,它不适合你吗? -
@Bravo 正如您在示例中看到的那样,必须已经使用参数调用函数,我的想法是将数组作为上下文传递以避免这种情况。在我的想法中,所有的工作都会像
this.fliter、return this等。如果我写得不够清楚,请见谅 -
是的,有什么问题?您正在使用参数
arr作为函数的this值调用函数...您可能不想这样做,我已经解释过了 -
@Bravo 再次,抱歉,如果我在这里不清楚,但问题是当我这样调用查询函数时:
query(friends, select('name'))函数在错误的上下文和查询函数内部立即运行我得到的是未定义的
标签: javascript function arguments