Split out every into everyValue.

This commit is contained in:
John-David Dalton
2017-04-09 22:59:31 -07:00
parent d10b44bdef
commit 23ae2c537d
4 changed files with 49 additions and 56 deletions

View File

@@ -1,22 +0,0 @@
/**
* A specialized version of `every` for arrays.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if all elements pass the predicate check,
* else `false`.
*/
function arrayEvery(array, predicate) {
let index = -1
const length = array == null ? 0 : array.length
while (++index < length) {
if (!predicate(array[index], index, array)) {
return false
}
}
return true
}
export default arrayEvery

View File

@@ -1,21 +0,0 @@
import baseEach from './baseEach.js'
/**
* The base implementation of `every`.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if all elements pass the predicate check,
* else `false`
*/
function baseEvery(collection, predicate) {
let result = true
baseEach(collection, (value, index, collection) => {
result = !!predicate(value, index, collection)
return result
})
return result
}
export default baseEvery

View File

@@ -1,19 +1,16 @@
import arrayEvery from './.internal/arrayEvery.js'
import baseEvery from './.internal/baseEvery.js'
/**
* Checks if `predicate` returns truthy for **all** elements of `collection`.
* Checks if `predicate` returns truthy for **all** elements of `array`.
* Iteration is stopped once `predicate` returns falsey. The predicate is
* invoked with three arguments: (value, index|key, collection).
* invoked with three arguments: (value, index, array).
*
* **Note:** This method returns `true` for
* [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
* [empty arrays](https://en.wikipedia.org/wiki/Empty_set) because
* [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
* elements of empty collections.
* elements of empty arrays.
*
* @since 0.1.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @since 5.0.0
* @category array
* @param {Array} array The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if all elements pass the predicate check,
* else `false`.
@@ -22,9 +19,16 @@ import baseEvery from './.internal/baseEvery.js'
* every([true, 1, null, 'yes'], Boolean)
* // => false
*/
function every(collection, predicate) {
const func = Array.isArray(collection) ? arrayEvery : baseEvery
return func(collection, predicate)
function every(array, predicate) {
let index = -1
const length = array == null ? 0 : array.length
while (++index < length) {
if (!predicate(array[index], index, array)) {
return false
}
}
return true
}
export default every

32
everyValue.js Normal file
View File

@@ -0,0 +1,32 @@
/**
* Checks if `predicate` returns truthy for **all** properties of `object`.
* Iteration is stopped once `predicate` returns falsey. The predicate is
* invoked with three arguments: (value, key, object).
*
* **Note:** This method returns `true` for
* [empty objects](https://en.wikipedia.org/wiki/Empty_set) because
* [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
* elements of empty objects.
*
* @since 5.0.0
* @category object
* @param {Object} object The object to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if all properties pass the predicate check,
* else `false`.
* @example
*
* everyValue({ 'a': 0, 'b': 'yes', 'c': false }, Boolean)
* // => false
*/
function everyValue(object, predicate) {
const props = Object.keys(Object(object))
for (const key of props) {
if (!predicate(object[key], key, object)) {
return false
}
}
return true
}
export default everyValue