Javascript或jQuery中Pythons functools.partial的等价物是什么?
答案 0 :(得分:4)
或许这样的事情。这有点棘手,因为javascript没有像python这样的命名参数,但是这个函数非常接近。
DbContext.Users.Where(r => r.FirstName.Contains(model.Search.Value) ||
r.LastName.Contains(model.Search.Value) ||
r.Email.Contains(model.Search.Value))
.**OrderByDescending(r => r.Id)**.Skip(model.Start).Take(model.Length);
答案 1 :(得分:2)
这是一个适用于ES6
的简单解决方案。但是,由于javascript不支持命名参数,因此在创建局部变量时将无法跳过参数。
const partial = (func, ...args) => (...rest) => func(...args, ...rest);
示例
const greet = (greeting, person) => `${greeting}, ${person}!`;
const greet_hello = partial(greet, "Hello");
>>> greet_hello("Universe");
"Hello, Universe!"
答案 2 :(得分:0)
要让 ES6 Solution 也支持类:
const isClass = function (v) {
// https://stackoverflow.com/a/30760236/2314626
return typeof v === "function" && /^\s*class\s+/.test(v.toString());
};
const partial = (func, ...args) => {
return (...rest) => {
if (isClass(func)) {
return new func(...args, ...rest);
}
return func(...args, ...rest);
};
};
使用:
class Test {
constructor(a, b, c) {
this.a = a;
this.b = b;
this.c = c;
}
}
const partialClass = partial(Test, "a");
const instance = partialClass(2, 3);
console.log(instance);
输出:
➔ node tests/test-partial.js
Test { a: 'a', b: 2, c: 3 }