如何检查Typescript中的哈希映射是否为空

时间:2018-11-07 10:18:22

标签: typescript dictionary hash hashmap

我有

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;
}

1 个答案:

答案 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