如何检查 Map 或 Set 是否为空?

39

使用传统的JavaScript对象,通过Object.keys方法很容易检查它是否为空:

const emptyObj = {};
console.log(Object.keys(emptyObj).length === 0);  // true, i.e. "empty"

const populatedObj = { foo: 'bar' };
console.log(Object.keys(populatedObj).length === 0);  // false, not empty

虽然有点冗余,但如果你喜欢,你也可以使用相同的方法来处理数组:

const emptyArr = [];
console.log(Object.keys(emptyArr).length === 0);  // true

const populatedArr = [1, 2, 3];
console.log(Object.keys(populatedArr).length === 0);  // false

然而,ES6中方便的新数据结构MapSet的工作方式不同。如果你尝试在它们上面使用Object.keys,你将始终得到一个空数组!

const populatedSet = new Set(['foo']);
console.log(Object.keys(populatedSet).length);  // 0

const populatedMap = new Map([['foo', 1]]);
console.log(Object.keys(populatedMap).length);  // 0

那么,检查您的新fancy ES6结构是否被填充的最佳方法是什么?此外,是否有某种可以用于对象、数组、Map和Set的单一重载方法?


2
这个目的有一个属性.size - HankMoody
1
你应该使用 map.size 而不是 map.length - Derek Pollard
1
请务必阅读这些东西的文档,因为它们有惊人的记录:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map - Derek Pollard
1
虽然size属性肯定有文档记录,但它并不明显,而且专门搜索空Map/Set也没有太多结果。因此,我认为在StackOverflow上记录这个具体问题会很有用。 - Zac Delventhal
4个回答

44

你需要使用它的size属性。地图和集合都有它(这里这里)。

const populatedSet = new Set(['foo']);
console.log(populatedSet.size);  // 1

const populatedMap = new Map([['foo', 1]]);
console.log(populatedMap.size);  // 1

(旁注:为了保持实现和使用它们的代码的健康,WeakMaps和WeakSets没有“size”或其他几个强类型对应物所具有的功能。 :-) 在它们具有类似功能的地方,它们提供相同的API,但它们不是子类。)

15

您可以直接检查此内容:

if (storeMapDetails.size == 0) {
    // Do something
}

3

无论哪种情况,你都可以使用以下方法:

const populatedSet = new Set(['foo']);
console.log(populatedSet.size); // should be 1

0

尝试使用jQuery

if ($.isEmptyObject(your_map_object))
{
    // do something
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接