检查多维对象是否为空

时间:2017-03-20 14:23:10

标签: javascript jquery arrays multidimensional-array

我有一个多维对象。根据其内容(空或非空),我想执行不同的功能 所以我试图检查它是否为空:

arr = [
  [],
  [],
  []
];

Object.size = function(obj) {
  var size = 0,
    key;
  for (key in obj) {
    if (obj.hasOwnProperty(key)) size++;
  }
  return size;
};

var size = Object.size(arr);

if (size > 0) {
  alert("NOT empty!")
} else {
  alert("empty...")
}

在我的例子中它显示NOT empty!,虽然它是空的(好吧,有点。有几个空对象)。

那么如何确定它是否由空对象组成?

Here is a fiddle

6 个答案:

答案 0 :(得分:2)

如果您认为数组为空,只要它们只包含空插槽数组为空,请使用递归函数:

function isEmpty(array) {
  return Array.isArray(array) && (array.length == 0 || array.every(isEmpty));
}

// Examples:
console.log(isEmpty([[], [[]]]));    // true
console.log(isEmpty([,,]));          // true
console.log(isEmpty([undefined]));   // false
console.log(isEmpty([null]));        // false
console.log(isEmpty(['']));          // false
console.log(isEmpty([0]));           // false
console.log(isEmpty([{}]));          // false
console.log(isEmpty({}));            // false

答案 1 :(得分:1)

您可以检查数组的长度

    var arr = [
      [],
      [],
      []
    ];
    
    Object.size = function(obj) {
      var size = 0,
        key;
      for (key in obj) {
        if (obj[key].length != 0) size++;
      }
      return size;
    };
    
    var size = Object.size(arr);
    
    if (size > 0)  alert("NOT empty!")
     
    else           alert("empty...")

小提琴example

答案 2 :(得分:1)

some就是您所需要的一切

var hasValues = arr.some( function (a) { return a.length });

或者您可以使用every

var isEmpty = arr.every( function (a) { return !a.length });

答案 3 :(得分:0)

按照@ÖzgürErsil的回答,但适用于对象和数组:

let onlyEmpties = arg => {
  let hasNoEntries = item => {
    if (Object.prototype.toString.call(item) === "[object Array]") {
      return item.length === 0;
    } else {
      return Object.keys(item).length === 0;
    }
  };

  let isEmpty = hasNoEntries(arg);
  return isEmpty || 
    (arg.every ?
      arg.every(hasNoEntries) :
      Object.keys(arg).every(hasNoEntries)
    );
};

答案 4 :(得分:0)

  

尝试以下方法。它给出了结果中有多少元素在数组中不为空。尝试下面的plunker链接。

arr = [
            [],
            [],
            []
        ];
        var i, len=0;
        for(i=0; i<arr.length; i++){
            //console.log(arr[i].length);
            if(arr[i].length!=0){
                len++;
            }
        }
        console.log("Array have "+ len +" Element");

See the demo

答案 5 :(得分:0)

您可以展平数组

var arr = [ [], [], [] ];

var flattenedArray = arr.flat(1);

console.log(flattenedArray.length)