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

新手上路,请多包涵

对于 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

那么检查你喜欢的新 ES6 结构是否被填充的最好方法是什么?此外,是否存在某种适用于对象、数组、映射 集合的单一重载方法?

原文由 Zac Delventhal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

您使用它的 size 属性。 Maps 和 Sets 都有它( 这里这里)。

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

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以直接检查这个:

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

原文由 Shubham Kumar Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏