Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查找数组中的对象是否为空?_Javascript_Arrays_Json - Fatal编程技术网

Javascript 如何查找数组中的对象是否为空?

Javascript 如何查找数组中的对象是否为空?,javascript,arrays,json,Javascript,Arrays,Json,假设我有一个数组,如下所示: arr = [{}, {}, {}, {}] 我希望能够知道数组的长度,只计算其中至少有一个属性的对象 [{}, {name: "Derby County", odds: 2}, {}, {}] // 1 [{}, {name: "Derby County", odds: 2}, {name: "Fullham", odds: 3} ,{}] // 2 如何实现这一点?如果您: arr.map(x=> Object.keys(x).length) 您将

假设我有一个数组,如下所示:

arr = [{}, {}, {}, {}]
我希望能够知道数组的长度,只计算其中至少有一个属性的对象

[{}, {name: "Derby County", odds: 2}, {}, {}] // 1

[{}, {name: "Derby County", odds: 2}, {name: "Fullham", odds: 3} ,{}] // 2
如何实现这一点?

如果您:

arr.map(x=> Object.keys(x).length)
您将获得:

[ 0, 0, 0, 1 ]
如果对象为空,则没有关键帧,因此其长度为0

如果需要正确/错误的结果,请执行以下操作:

arr.map(x=> Object.keys(x).length).some(x=>x>0)
示例:
console.log(“[{},{}]”,[{},{}).map(x=>Object.keys(x.length).some(x=>x>0))
console.log(“[{},{a:1}]”,[{},{a:1}].map(x=>Object.keys(x.length).some(x=>x>0))
如果您:

arr.map(x=> Object.keys(x).length)
您将获得:

[ 0, 0, 0, 1 ]
如果对象为空,则没有关键帧,因此其长度为0

如果需要正确/错误的结果,请执行以下操作:

arr.map(x=> Object.keys(x).length).some(x=>x>0)
示例:
console.log(“[{},{}]”,[{},{}).map(x=>Object.keys(x.length).some(x=>x>0))
console.log(“[{},{a:1}]”,[{},{a:1}].map(x=>Object.keys(x.length).some(x=>x>0))
arr.filter(x=>Object.keys(x.length).length
如其他答案所述,
Object.keys()
返回给定对象的属性名。内部
.length
是一种仅筛选至少具有一个属性的项的快捷方式。外部
.length
告诉您有多少对象适合描述

更新:

[].filter()
方法接受一个返回thruthy/falsy值的函数。大于0的数字是thruthy,因此它与
.length!==0

这里的假设是数组中包含的任何元素都是非空的。在此假设下,在
[].filter()
中检查对象是否为null是没有意义的。使用TypeScript时,它是对
arr
的静态检查。如果假设被打破,那么就会抛出一个错误,这是我通常想要的。我不会隐藏运行时错误。如果这里有运行时错误,我将检查该假设。但是我不确定这里的情况是否如此。

arr.filter(x=>Object.keys(x.length).length
如其他答案所述,
Object.keys()
返回给定对象的属性名。内部
.length
是一种仅筛选至少具有一个属性的项的快捷方式。外部
.length
告诉您有多少对象适合描述

更新:

[].filter()
方法接受一个返回thruthy/falsy值的函数。大于0的数字是thruthy,因此它与
.length!==0


这里的假设是数组中包含的任何元素都是非空的。在此假设下,在
[].filter()
中检查对象是否为null是没有意义的。使用TypeScript时,它是对
arr
的静态检查。如果假设被打破,那么就会抛出一个错误,这是我通常想要的。我不会隐藏运行时错误。如果这里有运行时错误,我将检查该假设。但是我不确定这里是否是这样。

Object.keys(obj).length
将在至少有一个可继承的、非继承的属性时产生一个非零结果。
检测添加的内容
这有多种解释方法,使用完全不同的解决方案你是对的@AndréWerlang我现在更新OP,谢谢,我已经更新了OP,希望它更清晰?
Object.keys(obj)。length
将在至少有一个iterable、非继承属性时产生非零结果。
检测添加的内容
这有多种解释方法,解决方案完全不同您是对的@AndréWerlang我现在更新OP,谢谢我已经更新了OP,希望它更清晰?记得检查null
arr.filter(x=>x?Object.keys(x).length>0:false).length谢谢回复,很抱歉,我又更新了OP!希望现在我已经清楚地表达了自己properly@A7DC编辑没有改变答案,它仍然符合,我猜
.length
访问使您认为它会累积属性?@ThilinaHasantha期望输入数组只包含非空对象是一个有效的假设。此外,如果假设未能检查null
arr.filter(x=>x?Object.keys(x).length>0:false).length,它也会抛出一个错误谢谢回复,很抱歉,我又更新了OP!希望现在我已经清楚地表达了自己properly@A7DC编辑没有改变答案,它仍然符合,我猜
.length
访问使您认为它会累积属性?@ThilinaHasantha期望输入数组只包含非空对象是一个有效的假设。此外,如果假设失败,它也会抛出一个错误