Lodash _.pluck执行此操作
var users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 }
];
_.pluck(users, 'user');
// → ['barney', 'fred']
关于它的好处是它也可以像这样深入:
var users = [
{ 'user': {name: 'barney'}, 'age': 36 },
{ 'user': {name: 'fred'}, 'age': 40 }
];
_.pluck(users, 'user.name');
// ["barney", "fred"]
在Clojure核心中是否有相同的内容?我的意思是,我可以很容易地创建一个像这样的行
(defn pluck
[collection path]
(map #(get-in % path) collection))
并像这样使用它:
(def my-coll [{:a {:z 1}} {:a {:z 2}}])
(pluck my-coll [:a :z])
=> (1 2)
我只是想知道Clojure中是否已经包含了这样的东西,我忽略了它。
答案 0 :(得分:4)
没有内置功能。您可以参考clojure.core API reference和the cheatsheet查找可用的内容。
我想说Clojure的语法足够轻,使用map
和get-in
等访问器实用程序的组合就足够了。
这也证明了Clojure社区中一个广泛采用的原则:提供大多数简单的默认值,让用户根据需要组合它们。有些人可能认为pluck
会混淆迭代和查询。
答案 1 :(得分:3)
最简单的方法是:
$needle
它将返回列表$array
答案 2 :(得分:0)
lodash
弃用_.pluck
函数,支持_.map
。因此:
_.pluck(users, 'user')
现在是
_.map(users, 'user')
我喜欢lodash/fp
的味道,将迭代物放在集合前面
_.map('user', users)
你也可以免费获得autocurry
_.map('user')(users)
答案 3 :(得分:0)
以下是一些简单的技巧:
(def my-coll [{:a {:z 1}} {:a {:z 2}}])
(map :a my-coll)
=> ({:z 1} {:z 2})
(map (comp :z :a) my-coll)
=> (1 2)
可以使用,因为关键字的行为也类似于函数。
答案 4 :(得分:0)
lodash中的此函数现在称为pick,我相信它在Clojure中最接近的等效项是select-keys。