【问题标题】:How to get _.pick functionality in lodash version 4如何在 lodash 版本 4 中获得 _.pick 功能
【发布时间】:2016-04-21 02:22:53
【问题描述】:

据我所知,这个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

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

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    更新(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)
    

    【讨论】:

    • 是的,我尝试了同样的事情,使用 _.pick 和 _.pickBy 链接 - 没有成功。我会给你一个别出心裁的 - 但不能真正接受作为一个优雅的答案。在我看来,他们实际上已经删除了功能。
    【解决方案2】:

    嗯,没有记录表明 _.startsWith() 已从 Lodash 中删除。

    不管怎样,解析key的第一个字符怎么样?

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

    【讨论】:

    • _.pick() 在 v4 中不再接受谓词。这就是 _.pickBy 现在正在做的事情。有关详细信息,请参阅我的答案。
    【解决方案3】:
    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"]))
    

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2019-04-18
      相关资源
      最近更新 更多