如何检查对象内的数组是不是为空 JavaScript
Posted
技术标签:
【中文标题】如何检查对象内的数组是不是为空 JavaScript【英文标题】:How to check if array inside object is empty JavaScript如何检查对象内的数组是否为空 JavaScript 【发布时间】:2021-05-12 20:43:23 【问题描述】:const isEmpty = Object.keys(data).every((key) =>
return data[key].length === 0;
);
如何检查对象中的所有数组是否为空。 我试过的这段代码的问题是我得到了这个:
data
0: Array[]
1: Array[]
2: Array[]
data
0: Array[]
1: Array[1]
2: Array[]
对于第一个对象,我得到假,这没关系,但第二个我得到真,但我想得到假,直到所有 arrays.length > 0,所以我只需要在这种情况下得到真:
obj
0: Array[1]
1: Array[1]
2: Array[1]
【问题讨论】:
如果你知道你想要下面的arrays.length > 0
。那你为什么不用length === 0
呢?
您的data
完全无效。 Array[0]
应该是什么?如果这真的是你的代码,那将不会返回 false 或 true,而只会抛出错误......
写Array[0]
等是什么意思?如果您的意思是一个包含 0 个元素的数组,那么您的解决方案将为第一个提供 true
,第二个提供 false
,而不是第一个提供 false
,第二个提供 true
。此外,您想要的结果还不清楚,您说您希望它在所有arrays.length > 0
之前都为真,然后说“我需要在这种情况下仅为真 ",这表明只有当所有 arrays.length
都等于 1 时才需要 true
我创建了解决方案
【参考方案1】:
使用 Object.values 方法。
Object.values(data).some(it => !it.length)
【讨论】:
这行不通,但你已经够近了 @Rajesh 抱歉,我在it.length
之前忘记了 !
运算符【参考方案2】:
解决办法
function CheckArray(obj)
this.haveItems = false;
this.onCheck = function (obj)
let createdArr = Object.values(obj);
for (let i = 0; i < createdArr.length; i++)
if (createdArr[i].length > 0)
this.haveItems = true;
break;
;
let data =
0: [],
1: [],
2: [],
;
let a = new CheckArray();
a.onCheck(data);
console.log(a);
【讨论】:
【参考方案3】:您可以检查所有值的长度。
const isEmpty = data => !Object.values(data).every(( length ) => length);
console.log(isEmpty( 0: [], 1: [], 2: [] ));
console.log(isEmpty( 0: [], 1: [1], 2: [] ));
console.log(isEmpty( 0: [0], 1: [1], 2: [2] ));
【讨论】:
我认为const isEmpty = data => Object.values(data).every(( length ) => !length);
否则函数应该命名为 someEmpty
或类似的名称。
命名由操作决定。我更喜欢hasEmptyArrays
...
啊,你是对的。我错过了一个事实,即所需的行为与 OP 赋予该函数的名称不匹配。以上是关于如何检查对象内的数组是不是为空 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:检查对象是不是没有属性或映射/关联数组是不是为空[重复]