如何检查数组对象是否为空

时间:2018-10-29 16:59:39

标签: javascript

我有一个这样的对象:

{
  places: [],
  interests: [],
  checkIns: []
}

如何轻松检查其中任何一个数组是否为空?

4 个答案:

答案 0 :(得分:3)

如果您使用的是ES6:

Object.values(obj).every(x => !x.length)

仅当obj的所有数组为空时才返回true。

示例:

var obj = {
  places: [],
  interests: [],
  checkIns: []
}

console.log(Object.values(obj).every(x => !x.length));

var obj = {
  places: [1],
  interests: [],
  checkIns: []
}

console.log(Object.values(obj).every(x => !x.length));

答案 1 :(得分:2)

如果属性确实是Object.entries的实例,则可以使用Array.prototype.forEachArray遍历对象的属性,并检查数组的长度。

var o = {
  places: [],
  interests: [],
  checkIns: [],
  someItems: [1, 2, 3, 4],
  notArr: false
};

Object.entries(o).forEach(function(entry) {
  let [key, value] = entry;
  if (value instanceof Array) {
    if (value.length === 0) {
      console.log(`${key} is an empty array`);
    } else {
      console.log(`${key} is an array that contains items`);
    }
  } else {
    console.log(`${key} is not an array`);
  }
})

答案 2 :(得分:0)

使用for...in

遍历属性
  

for...in语句遍历对象的所有非Symbolenumerable properties

对于每次迭代,您可以检查是否有任何数组的length为0。

答案 3 :(得分:-1)

如果您要检查提供的数组对象中数组的 ANY 是否为空,请考虑使用Array.some()

来自MDN的

  

some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。

由于您的数组对象暂时还不是Array,因此必须先将其转换为一个。在这种情况下,请使用Object.values(): 例如: let arrays = Object.values(objectOfArrays)

来自MDN的

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了in ...原型链)。

现在您拥有ArrayArrays中的let arrays = [[], [], []],则可以使用Array.some()

arrays.some(array => !array.length)

或:

arrays.some(function(array) {
  return !array.length
})

请注意,仅指定array.length就足够了,而不是完全均衡(array.length === 0)。这是因为0的javascript(Boolean)签入中的if (condition) {...}返回了false

如果数组中包含任何值,则array.length应该比0高一个数字,这意味着调用if (array.length) {...}将返回true

PS: 调用Array.every()是另一种方法。尽管注意Array.every()遍历数组中的所有值,而Array.some()满足条件后返回true,然后停止。