【问题标题】:Lodash check whether an array is array of object?Lodash检查数组是否是对象数组?
【发布时间】:2017-03-07 07:33:12
【问题描述】:

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

就像两者都会返回 true

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

【问题讨论】:

  • 好吧..实际上“对象数组”也是数组。此外,数组可能同时包含对象和标量值

标签: javascript underscore.js lodash


【解决方案1】:

您可以使用_.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 是矫枉过正。
  • 好的,所以你只想检查一个索引?这并不太难。我可以将它添加到上面的基本语法中。
  • 不,它没有。请参阅上面编辑的基本语法部分。
  • 嘿,我发现了一些问题。 jsbin.com/vuluzejetu/1/edit?html,js,console isObject 没有按预期工作。大声笑。
  • 你能把代码贴在这里吗?它没有在 JSBin 上显示,我只看到 isArray 和 JS 部分后面的空格。
【解决方案2】:

这应该可以完成工作

_.every(yourArray, function (item) { return _.isObject(item); });

如果yourArray所有元素都是对象,这将返回true

如果你需要进行部分匹配(如果至少存在一个对象)你可以试试_.some

_.some(yourArray, _.isObject);

【讨论】:

  • _.every 和 _.some 都循环遍历你的整个属性集,如何检查指定属性的值?
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2019-07-01
相关资源
最近更新 更多