lib/reduce-extract.js
function extract (query) {
  var toSplice = []
  var extracted = []
  return function (prev, curr, index, array) {
    if (prev !== extracted) {
      if (testValue(prev, query)) {
        extracted.push(prev)
        toSplice.push(index - 1)
      }
    }

    if (testValue(curr, query)) {
      extracted.push(curr)
      toSplice.push(index)
    }

    if (index === array.length - 1) {
      toSplice.reverse()
      for (var i = 0; i < toSplice.length; i++) {
        array.splice(toSplice[i], 1)
      }
    }
    return extracted
  }
}
function extract (query) {
  var toSplice = []
  var extracted = []
  return function (prev, curr, index, array) {
    if (prev !== extracted) {
      if (testValue(prev, query)) {
        extracted.push(prev)
        toSplice.push(index - 1)
      }
    }

    if (testValue(curr, query)) {
      extracted.push(curr)
      toSplice.push(index)
    }

    if (index === array.length - 1) {
      toSplice.reverse()
      for (var i = 0; i < toSplice.length; i++) {
        array.splice(toSplice[i], 1)
      }
    }
    return extracted
  }
}
function extract ( query ) { var toSplice = [ ] var extracted = [ ] return function ( prev , curr , index , array ) { if ( prev !== extracted ) { if ( testValue ( prev , query ) ) { extracted . push ( prev ) toSplice . push ( index - 1 ) } } if ( testValue ( curr , query ) ) { extracted . push ( curr ) toSplice . push ( index ) } if ( index === array . length - 1 ) { toSplice . reverse ( ) for ( var i = 0 ; i < toSplice . length ; i ++ ) { array . splice ( toSplice [ i ] , 1 ) } } return extracted } }
Removes items from `array` which satisfy the query. Modifies the input array, returns the extracted.

@param {Array} - the input array, modified directly
@param {any} - if an item in the input array passes this test it is removed
@alias module:reduce-extract
@example
> DJs = [
{ name: "Trevor", sacked: true },
{ name: "Mike", sacked: true },
{ name: "Chris", sacked: false },
{ name: "Alan", sacked: false }
]

> a.extract(DJs, { sacked: true })
[ { name: 'Trevor', sacked: true },
{ name: 'Mike', sacked: true } ]

> DJs
[ { name: 'Chris', sacked: false },
{ name: 'Alan', sacked: false } ]
Removes items from array which satisfy the query . Modifies the input array returns the extracted .