Как проверить, что хеш-карта пуста в Typescript - PullRequest
0 голосов
/ 07 ноября 2018

у меня

my_map: { [name: string]: string }

Как проверить, является ли хэш-карта my_map пустой?

Я могу думать о Object.keys(my_map).length === 0, но это кажется излишним.


TLDR; Решение см. Ответ ниже

Это не перебор. Нет лучшего общего решения.

Если вы ограничиваете проверку для объекта, который наверняка является хэш-картой, вы можете использовать:

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

Интересно, что вы не можете иметь универсальную функцию на хэш-карте , поэтому вы вынуждены иметь две функции, что довольно уродливо.

И вообще:

function isEmptyObject(obj: any) {
  return Object.keys(obj).length === 0 && obj.constructor === Object;
}

1 Ответ

0 голосов
/ 07 ноября 2018

Как ни странно, ваше решение по избыточному количеству средств фактически недостаточно; вам нужно пойти немного дальше:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...