我已经声明了一个空元素数组,如何检查哪些元素保持为空?

时间:2014-05-27 14:44:52

标签: javascript jquery arrays object properties

正如标题所说,我有以下数组:

var viewModel = [{}, {}, {}];

在我的代码中的某些时候,我可能会填充第二个元素:

var viewModel = [{}, { "test" : "value" }, {}];

我需要一种评估元素是否为空的方法。在上面的例子中,元素0和2将评估为true,元素1将评估为false。

我尝试过什么

我尝试将每个元素与undefined' '进行比较无济于事。我知道可能会检查每个元素的test属性(如果它存在它不是空的)但我理想地想要一种确定它的方法,不依赖于任何属性名称。

(我已经标记了jQuery,因为我对jQuery建议持开放态度。)

4 个答案:

答案 0 :(得分:1)

{} === {} //false

JSON.stringify({}) === JSON.stringify({}) //true

JSON.stringify(myArray[0]) === JSON.stringify({}) //true    

在您的特定情况下,这可能会派上用场。我也没有考虑过漏洞。

答案 1 :(得分:0)

这个怎么样

// function to check if object is empty
function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}

var viewModel = [{}, { "test" : "value" }, {}];
// loop
for(var i = 0; i < viewModel.length; i++)
{ 
    // returns true if empty, otherwise false
    console.log(isEmpty(viewModel[i]));
}

答案 2 :(得分:0)

您可以通过循环遍历数组来计算每个对象中的元素。

for(var i = 0; i < test.length; i++){
  if(Object.keys(test).length == 0){
    //element array[i] is empty!
  }
}

这仅适用于支持Ecma-script 5的浏览器。

答案 3 :(得分:0)

获取一个对象数组并返回一个新的true / false值数组

function isObjectEmpty(arr) {
  return arr.map(function (el) {
    return Object.keys(el).length === 0 ? true : false;
  });
}

isObjectEmpty(yourExampleArray) // [true, false, true]

Demo