Skip to content

Instantly share code, notes, and snippets.

@jcollum
Created September 2, 2015 20:26
Show Gist options
  • Save jcollum/c9905ed7c01c235e7224 to your computer and use it in GitHub Desktop.
Save jcollum/c9905ed7c01c235e7224 to your computer and use it in GitHub Desktop.
a multi-pluck mixin for lodash
ld = require 'lodash'
assert = require("assert")
multiPluck = (input,keys) ->
pluckFrom = (o,keys) ->
result = {}
for k in keys
unless result[k]?
result[k] = o[k] or undefined
result
r = null
if Array.isArray(input)
r = []
for item in input
r.push( pluckFrom(item, keys))
else
r = pluckFrom(input, keys)
r
ld.mixin(multiPluck: multiPluck)
arr = [{a: 4, b:7, c:19}
{a: 6, c:4, b:12}
{a: 4, c:3, b:5}]
r0 = ld.multiPluck(arr, ['a','c'])
r1 = ld.multiPluck(arr[1], ['c', 'b'])
console.dir(r0) # [ { a: 4, c: 19 }, { a: 6, c: 4 }, { a: 4, c: 3 } ]
console.dir(r1) # { c: 4, b: 12 }
assert(r0[0].a == 4)
assert(r0[0].c == 19)
assert(r0[0].b == undefined)
assert(r1.a == undefined)
assert(r1.b == 12)
assert(r1.c == 4)
filtered = ld(arr).where(a:4).multiPluck(['c','b'])
console.dir(filtered.value()) # [ { c: 19, b: 7 }, { c: 3, b: 5 } ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment