change approach again
This commit is contained in:
62
node_modules/find-replace/lib/find-replace.js
generated
vendored
Normal file
62
node_modules/find-replace/lib/find-replace.js
generated
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
'use strict'
|
||||
var arrayify = require('array-back')
|
||||
var testValue = require('test-value')
|
||||
|
||||
/**
|
||||
* Find and either replace or remove items from an array.
|
||||
*
|
||||
* @module find-replace
|
||||
* @example
|
||||
* > findReplace = require('find-replace')
|
||||
*
|
||||
* > findReplace([ 1, 2, 3], 2, 'two')
|
||||
* [ 1, 'two', 3 ]
|
||||
*
|
||||
* > findReplace([ 1, 2, 3], 2, [ 'two', 'zwei' ])
|
||||
* [ 1, [ 'two', 'zwei' ], 3 ]
|
||||
*
|
||||
* > findReplace([ 1, 2, 3], 2, 'two', 'zwei')
|
||||
* [ 1, 'two', 'zwei', 3 ]
|
||||
*
|
||||
* > findReplace([ 1, 2, 3], 2) // no replacement, so remove
|
||||
* [ 1, 3 ]
|
||||
*/
|
||||
module.exports = findReplace
|
||||
|
||||
/**
|
||||
* @param {array} - the input array
|
||||
* @param {valueTest} - a [test-value](https://github.com/75lb/test-value) query to match the value you're looking for
|
||||
* @param [replaceWith] {...any} - If specified, found values will be replaced with these values, else removed.
|
||||
* @returns {array}
|
||||
* @alias module:find-replace
|
||||
*/
|
||||
function findReplace (array, valueTest) {
|
||||
var found = []
|
||||
var replaceWiths = arrayify(arguments)
|
||||
replaceWiths.splice(0, 2)
|
||||
|
||||
arrayify(array).forEach(function (value, index) {
|
||||
var expanded = []
|
||||
replaceWiths.forEach(function (replaceWith) {
|
||||
if (typeof replaceWith === 'function') {
|
||||
expanded = expanded.concat(replaceWith(value))
|
||||
} else {
|
||||
expanded.push(replaceWith)
|
||||
}
|
||||
})
|
||||
|
||||
if (testValue(value, valueTest)) {
|
||||
found.push({
|
||||
index: index,
|
||||
replaceWithValue: expanded
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
found.reverse().forEach(function (item) {
|
||||
var spliceArgs = [ item.index, 1 ].concat(item.replaceWithValue)
|
||||
array.splice.apply(array, spliceArgs)
|
||||
})
|
||||
|
||||
return array
|
||||
}
|
Reference in New Issue
Block a user