Javascript / jQuery

时间:2015-10-21 12:57:48

标签: javascript jquery python

Javascript或jQuery中Pythons functools.partial的等价物是什么?

3 个答案:

答案 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解决方案

这是一个适用于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 }