如何在lodash版本4中获得_.pick功能

时间:2016-01-15 13:17:18

标签: javascript lodash

这个answer,如下所示,现在已经在lodash v4中被打破了。据我所知。

var thing = {
  "a": 123,
  "b": 456,
  "abc": 6789
};

var result = _.pick(thing, function(value, key) {
  return _.startsWith(key, "a");
});

console.log(result.abc) // 6789
console.log(result.b)   // undefined

你如何在lodash的第4版中做到这一点?

3 个答案:

答案 0 :(得分:2)

更新(2月8日)

从v4.0.1开始,_.omitBy和_.pickBy现在为谓词提供了一个密钥参数。因此,现在正确的答案是:

使用_.pickBy(object, [predicate=_.identity])

原始答案

从v4开始,一些方法已被拆分。例如,_.pick()已分为_.pick(array, [props])_.pickBy(object, [predicate=_.identity])

我的第一种方法是尝试这种_.pickBy()方法。不幸的是,所有...By()方法仅作为第一个参数传递值。他们不会获得密钥或集合通过。这就是为什么它只是从_.pick()切换到_.pickBy()

但是,你可以这样做:

var thing = {
  "a": 123,
  "b": 456,
  "abc": 6789
};

var result = _.pick(thing, _(thing).keys().filter(function(key) {
  return _.startsWith(key, "a");
}).value());

console.log(result)

答案 1 :(得分:0)

嗯,没有记录表明已经从Lodash中移除了_.startsWith()

这样或那样,如何解析密钥的第一个字符?

var result = _.pick(thing, function(value, key) {
  return key[0] == "a";
});

答案 2 :(得分:0)

var thing = {
  "a": 123,
  "b": 456,
  "abc": 6789
};

_.pick(object, arrayOfProperties)
_.pick(thing,["a","b"])={"a":123,"b":456}

当使用rest API时,此方法非常有用。当您通过解析 req.body 创建对象时,这就是我们创建对象的方式。

router.post("/users", async (req, res) => {
  const user = new User({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password,
    age: req.body.age
  });});

如您所见,这令人头疼且看起来很丑。代替

const user=new User(_.pick(req.body,["name","email","password","age"]))