我有
my_map: { [name: string]: string }
如何检查哈希图my_map
是否为空?
我能想到Object.keys(my_map).length === 0
,但感觉有点过头了。
TLDR;解决方案,请参见下面的答案
这不是矫kill过正。没有更好的通用解决方案。
如果您将检查限制为肯定哈希图,则可以使用:
export function isHashmapEmpty<V>(hash: { [key: string]: V }): boolean {
return Object.keys(hash).length === 0;
}
export function isNumHashmapEmpty<V>(hash: { [key: number]: V }): boolean {
return Object.keys(hash).length === 0;
}
you cannot have a generic function on a hashmap足够有趣,因此您不得不具有两个功能,这很丑陋。
一般来说:
function isEmptyObject(obj: any) {
return Object.keys(obj).length === 0 && obj.constructor === Object;
}
答案 0 :(得分:2)
很有趣的是,您的过大解决方案实际上是不足之处。您需要进一步:
Object.keys(obj).length === 0 && obj.constructor === Object
示例:
function isEmptyUnderkill(obj: any) {
return Object.keys(obj).length === 0;
}
function isEmptyObject(obj: any) {
return Object.keys(obj).length === 0 && obj.constructor === Object;
}
const a = {};
const b = { name: 'User' };
console.log(isEmptyUnderkill(a), isEmptyObject(a));
console.log(isEmptyUnderkill(b), isEmptyObject(b));
console.log(isEmptyUnderkill(new Date()), isEmptyObject(new Date()));
给予:
true true
false false
true false