这个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版中做到这一点?
答案 0 :(得分:2)
从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"]))