什么是clojure.core相当于lodash _.pluck

时间:2015-06-13 08:34:00

标签: javascript clojure lodash

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中是否已经包含了这样的东西,我忽略了它。

5 个答案:

答案 0 :(得分:4)

没有内置功能。您可以参考clojure.core API referencethe cheatsheet查找可用的内容。

我想说Clojure的语法足够轻,使用mapget-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