Reputation: 7645
I couldn't find any Lodash method that can differentiate between a normal (e.g. integer) array and array of objects, since JavaScript treats object as array.
like both will return true
console.log(_.isArray([1,2,3])); // true
console.log(_.isArray([{"name":1}])); // true
Upvotes: 4
Views: 18863
Reputation: 4114
This should do the job
_.every(yourArray, function (item) { return _.isObject(item); });
This will return true
if all elements of yourArray
are objects.
If you need to perform partial match (if at least one object exists) you can try _.some
_.some(yourArray, _.isObject);
Upvotes: 1
Reputation: 16779
You can use _.every
, _.some
, and _.isObject
to differentiate between arrays of primitives, arrays of objects, and arrays containing both primitives and objects.
// Is every array element an object?
_.every(array, _.isObject)
// Is any array element an object?
_.some(array, _.isObject)
// Is the element at index `i` an object?
_.isObject(array[i])
var primitives = [1, 2, 3]
var objects = [{name: 1}, {name: 2}]
var mixed = [{name: 1}, 3]
// Is every array element an object?
console.log( _.every(primitives, _.isObject) ) //=> false
console.log( _.every(objects, _.isObject) ) //=> true
console.log( _.every(mixed, _.isObject) ) //=> false
// Is any array element an object?
console.log( _.some(primitives, _.isObject) ) //=> false
console.log( _.some(objects, _.isObject) ) //=> true
console.log( _.some(mixed, _.isObject) ) //=> true
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Upvotes: 12