Lodash如何检查数组是否为对象数组?

4

我找不到任何Lodash方法可以区分普通数组(如整数数组)和对象数组,因为JavaScript将对象视为数组。

例如,两者都会返回true。

console.log(_.isArray([1,2,3])); // true
console.log(_.isArray([{"name":1}])); // true

1
嗯...实际上,“对象数组”也是数组。此外,数组可以同时包含对象和标量值。 - hindmost
2个回答

12

您可以使用 _.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>


我只想检查一个属性是否有对象,不需要检��所有内容,想象一下我有一个对象有100个嵌套的对象和数组对象,__.some就过于复杂了。 - Alex Yong
让我们在聊天中继续这个讨论 - Alex Yong
这应该可以解决问题,只需在每个数组后面添加 [0]:https://jsbin.com/totoniwiju/edit?js - gyre
哦,为什么?我以为它会接收一个对象? - Alex Yong
它应该接收你想要测试的数组中的一个元素。方括号中的索引可以是任何值,但我建议使用0(表示第一个元素)。 - gyre
显示剩余4条评论

1
这应该可以完成工作。
_.every(yourArray, function (item) { return _.isObject(item); });

如果yourArray所有元素都是对象,这将返回true
如果需要进行部分匹配(如果至少存在一个对象),可以尝试使用_.some
_.some(yourArray, _.isObject);

.every和.some都会遍历整个属性集,如何检查特定属性的值? - Alex Yong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接