【问题标题】:Javascript: how to check empty object in an array? [duplicate]Javascript:如何检查数组中的空对象? [复制]
【发布时间】:2016-07-12 09:38:03
【问题描述】:

我从我的 JSON 响应中获取了一组对象。有时我会得到一个长度为 1 的数组,其中包含一个空对象。如何检查这种情况?

I tried with a few things-

  myarray[0]=='empty' || myarray[0] == 'undefined'
  or myarray.indexOf(0)== -1

但没有解决问题

【问题讨论】:

  • “空”是什么意思?我能想到的最“空”的值是 undefined,但 JSON 不能给你一个带有 undefined 条目的数组,因为它没有这个概念。
  • 仅供参考,myarray[0]=='empty' 测试第一个数组元素是否是 字符串 'empty'。首先,这似乎不是一件有用的事情。同样,myarray.indexOf(0) 尝试查找 0 的索引。看来您需要了解一些关于值的 JavaScript 基础知识:eloquentjavascript.net/01_values.htmleloquentjavascript.net/04_data.html

标签: javascript arrays


【解决方案1】:

您可以使用Object.keys() 方法返回所有属性名称并检查其长度:

Object.keys(myarray[0]).length === 0;

【讨论】:

  • @T.J.Crowder 我觉得它有点像"[{}]"。问题可以稍微澄清一下。
  • 我误解了你的回答。您可能对用户的意思是正确的,很好。
  • 感谢您的快速答复先生
  • 需要添加&& myarray.length == 1才能完全匹配要求,但我认为这是OP想要的
【解决方案2】:

这取决于你所说的“空”是什么意思。

如果你的意思是一个没有属性的对象

如果你的意思是你得到:

 [{}]

...然后madox2's answer is a good way to check。或者,您可能有一个可以重复使用的函数:

function isEmptyObject(obj) {
    for (const key in obj) {
        if (Object.hasOwn(obj, key)) { // Remove this if you want to check for
                                       // enumerable inherited properties
            return false;
        }
    }
    return true;
}

Object.hasOwn 是在 ES2022 中添加的,但很容易填充。)

如果你的意思是 [null] 或类似的

如果您想专门检查undefined(注意=== 而不是==)(但您不会从JSON 中得到undefined):

if (myarray[0] === undefined)

或者专门针对null(注意===而不是==):

if (myarray[0] === null)

或者对于其中任何一个(注意==而不是===):

if (myarray[0] == null)

或者对于任何 falsy 值(0""NaNnullundefined,当然还有false):

if (!myarray[0])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2021-05-12
    • 2020-11-12
    • 2021-07-23
    相关资源
    最近更新 更多