因此,我需要传入一个对象,其中的每个属性都是数组。函数将使用每个数组中保存的信息,但我希望通过检查每个数组是否也为空/空来检查整个对象是否为空(不只是没有属性)。到目前为止我所拥有的是:
function isUnPopulatedObject(obj) { // checks if any of the object's values are falsy
if (!obj) {
return true;
}
for (var i = 0; i < obj.length; i++) {
console.log(obj[i]);
if (obj[i].length != 0) {
return false;
}
}
return true;
}例如,这将导致上面的结果是false
obj {
0: Array[0]
1: Array[1]
2: Array[0]
}虽然这是我正在检查的空值(事实也是如此):
obj {
0: Array[0]
1: Array[0]
2: Array[0]
}以上代码不起作用。提前谢谢。
发布于 2016-10-07 14:28:37
因此,如果我们想遍历该对象并查找该对象的每个键是否通过检查,我们可以使用Object.keys和Array#extra every,如下所示:
var allEmpty = Object.keys(obj).every(function(key){
return obj[key].length === 0
})这将将allEmpty设置为布尔值( true /false),这取决于我们每次运行给定的check obj[key].length === 0是否返回true。
此对象将allEmpty设置为true:
var obj = {
0: [],
1: [],
2: []
}这将其设置为false:
var obj = {
0: [],
1: [],
2: [],
3: [1]
}发布于 2016-10-07 14:28:52
object没有length属性。还有其他几种方法可以循环遍历对象的值,您应该能够对这些值进行发现。
若要检查值是否为数组,可以使用Array.isArray。
例如:
function objectIsEmpty(obj) {
return Object.keys(obj).every(function(key) {
var val = obj[key];
if (Array.isArray(val) && val.length === 0) {
return true;
}
// Other rules go here:
// ...
return false;
});
};
console.log(objectIsEmpty({ 0: [], 1: [], 2: [] }));
console.log(objectIsEmpty({ 0: [], 1: [1], 2: [] }));
发布于 2016-10-07 15:47:25
在城里开始用新来的孩子可能会很有趣。Object.values()
var o1 = {0: [], 1: [1], 2: []},
o2 = {0: [], 1: [], 2: []},
chkObj = o => Object.values(o).every(a => a.length === 0);
console.log(chkObj(o1));
console.log(chkObj(o2));注意:这应该只适用于最新版本的Chrome,Opera和FF
https://stackoverflow.com/questions/39919560
复制相似问题