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

How to get _.pick functionality in lodash version 4

本文关键字:获取 pick 功能 lodash 版本      更新时间:2023-09-26

据我所知,这个答案,如下所示,现在在 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 版中做到这一点?

更新 (08.二月)

从 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)

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

无论如何,解析密钥的第一个字符怎么样?

var result = _.pick(thing, function(value, key) {
  return key[0] == "a";
});
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"]))