如何检查数组是不是包含至少一个对象?

Posted

技术标签:

【中文标题】如何检查数组是不是包含至少一个对象?【英文标题】:How to check if array contains at least one object ?如何检查数组是否包含至少一个对象? 【发布时间】:2018-03-21 15:58:00 【问题描述】:

我想检查数组是否包含对象。我不想比较值只是想检查我的数组是否存在对象?

例如

$arr = ['a','b','c'] // normal
$arr = [ id: 1, id: 2] // array of objects
$arr = [id: 1, id:2, 'a', 'b'] // mix values

那么如何检查数组是否包含对象

【问题讨论】:

会一直是 id 吗?还是可以改变? 遍历数组项并测试它是否是对象***.com/questions/8511281/… 您是在寻找特定的值,还是仅仅在数组包含“任何对象”时? @shv22 .object 可以是任何东西 @Cerbrus 只想检查数组是否包含对象。 【参考方案1】:

我想检查数组是否包含对象

使用some 简单地检查数组中的任何项是否具有“对象”类型的值

var hasObject = $arr.some( function(val)
   return typeof val == "object";
);

【讨论】:

【参考方案2】:

您可以使用some方法测试array中的至少一个元素是否通过提供的函数实现的test

let arr = [id: 1, id:2, 'a', 'b'];
let exists = arr.some(a => typeof a == 'object');
console.log(exists);

【讨论】:

感谢@Alexandru-Ionut Mihai。你的答案很完美。你能告诉我这是如何工作的吗? @parth, some 方法为数组中的任何项目提供回调测试函数。 test 函数检查数组项是否为对象。 condition 是如果 typeof a 是对象。some 方法返回 true 如果 at least 数组中的一项满足条件。 知道了。谢谢。【参考方案3】:

您可以计算对象并将其用于返回的三种类型之一。

function getType(array) 
    var count = array.reduce(function (r, a) 
        return r + (typeof a === 'object');
    , 0);
    
    return count === array.length
        ? 'array of objects'
        : count
            ? 'mix values'
            : 'normal';


console.log([
    ['a', 'b', 'c'],
    [ id: 1 ,  id: 2 ],
    [ id: 1 ,  id: 2 , 'a', 'b']
].map(getType));

【讨论】:

【参考方案4】:

var hasObject = function(arr) 
  for (var i=0; i<arr.length; i++) 
    if (typeof arr[i] == 'object') 
      return true;
    
  
  return false;
;

console.log(hasObject(['a','b','c']));
console.log(hasObject([ id: 1, id: 2]));
console.log(hasObject([id: 1, id:2, 'a', 'b']));

【讨论】:

【参考方案5】:

对数组进行类型检查

const hasObject = a => Array.isArray(a) && a.some(val => typeof val === 'object')

【讨论】:

以上是关于如何检查数组是不是包含至少一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个对象是不是至少包含一个键,其值包含 JavaScript 中的子字符串?

检查数组是不是至少包含 PHP 中的一组值

如何检查包含另一个对象数组的对象数组是不是具有属性

过滤具有多对多关系的对象,检查它是不是包含列表中的至少一个元素

检查数组是不是包含某个对象

如何检查 JSON 对象数组是不是包含数组中定义的值?