【问题标题】:I've declared an array of empty elements, how can I check which elements remain empty? [duplicate]我已经声明了一个空元素数组,如何检查哪些元素仍然为空? [复制]
【发布时间】:2014-07-16 13:05:13
【问题描述】:

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

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

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

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

我需要一种评估元素是否为空的方法。在上述情况下,元素 0 和 2 的计算结果为 true,元素 1 的计算结果为 false。

我的尝试

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

(我已标记 jQuery,因为我愿意接受 jQuery 建议)。

【问题讨论】:

  • 您的代码可能不起作用,因为数组元素包含一个空对象,它不是空的或未定义的。你可能想看看这个:api.jquery.com/jQuery.isEmptyObject 或这里的答案:stackoverflow.com/questions/679915/…
  • @Joe - 太棒了!!正是我所追求的。请张贴作为答案,我会相应地标记。非常感谢伙计。
  • 没关系,我只是重新发布其他人发布的内容。很高兴它对您有所帮助!

标签: javascript jquery arrays object properties


【解决方案1】:
{} === {} //false

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

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

这在您的特定情况下可能会派上用场。漏洞我也没多想。

【讨论】:

    【解决方案2】:

    这个怎么样

    // 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]));
    }
    

    【讨论】:

      【解决方案3】:

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

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

      这仅在支持 Ecma-script 5 的浏览器中。

      【讨论】:

        【解决方案4】:

        获取一个对象数组并返回一个新的真/假值数组

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

        Demo

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 1970-01-01
          • 2012-09-19
          相关资源
          最近更新 更多