forked from Gitlink/forgeplus-react
43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
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
|
|
* @format
|
|
*
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* 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; |