如何检查地图或集合是否为空?

时间:2019-04-04 16:08:45

标签: javascript ecmascript-6

使用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方便的新数据结构 Map Set 的工作方式不同。如果您尝试在它们上使用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

那么检查您是否花哨的新ES6结构是否被填充的最佳方法是什么?另外,是否有某种单一的重载方法适用于对象,数组,地图,集?

3 个答案:

答案 0 :(得分:2)

您使用其size属性。地图和集合都有它(herehere)。

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,但它们不是子类。

答案 1 :(得分:0)

两种情况下都可以使用

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

答案 2 :(得分:0)

您可以直接执行

if(storeMapDetails.size == 0)//做点什么 您可以直接检查