d2-ui
Version:
42 lines (36 loc) • 1.07 kB
JavaScript
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule findRangesImmutable
*
*/
/**
* Search through an array to find contiguous stretches of elements that
* match a specified filter function.
*
* When ranges are found, execute a specified `found` function to supply
* the values to the caller.
*/
;
function findRangesImmutable(haystack, areEqualFn, filterFn, foundFn) {
if (!haystack.size) {
return;
}
var cursor = 0;
haystack.reduce(function (value, nextValue, nextIndex) {
if (!areEqualFn(value, nextValue)) {
if (filterFn(value)) {
foundFn(cursor, nextIndex);
}
cursor = nextIndex;
}
return nextValue;
});
filterFn(haystack.last()) && foundFn(cursor, haystack.count());
}
module.exports = findRangesImmutable;