我找不到任何可以区分普通(例如整数)数组和对象数组的 Lodash 方法,因为 JavaScript 将对象视为数组。
就像两者都会返回真
console.log(_.isArray([1,2,3])); // true
console.log(_.isArray([{"name":1}])); // true
可以使用_.every
、_.some
和_.isObject
来区分基元数组、对象数组以及同时包含基元和对象的数组。
基本语法
// 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>
这应该可以完成这项工作
_.every(yourArray, function (item) { return _.isObject(item); });
如果yourArray
的所有元素都是对象,这将返回true
。
如果需要执行部分匹配(如果至少存在一个对象),可以尝试_.some
_.some(yourArray, _.isObject);