/** @module array/pluck.ts */
import { untypedCurry } from '../function/untypedCurry'
export function pluck( key: B, arr: A[][] ): Array
export function pluck( key: B, arr: A[] ): Array
export function pluck( key: number ): ( arr: A[][] ) => Array
// export function pluck,E extends keyof C>(key: B) :(arr:C[]) => {[H in B ]?: C[E]}[B][]
/**
* Takes an key (or index) and an array of arrays or objects and returns
* the selected key from each row
* @example
* pluck(1, [ [1,2,3], [4,5,6] ] )
* //=> [2,5]
* pluck('a',[ {a:1,b:2}, {a:3,b:4}])
* // => [1,3]
*/
export function pluck( keys: A ): ( arr: B ) => B
export function pluck( ...args ) {
return untypedCurry( ( key, arr ) => arr.map( ( item ) => item[ key ] ) )( ...args )
}
export default pluck