Zac*_*hal 19 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
Run Code Online (Sandbox Code Playgroud)
尽管有点多余,但如果您愿意,也可以对数组使用相同的方法:
const emptyArr = [];
console.log(Object.keys(emptyArr).length === 0); // true
const populatedArr = [1, 2, 3];
console.log(Object.keys(populatedArr).length === 0); // false
Run Code Online (Sandbox Code Playgroud)
然而,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
Run Code Online (Sandbox Code Playgroud)
那么,检查您喜欢的新 ES6 结构是否已填充的最佳方法是什么?另外,是否有某种单一的重载方法适用于对象、数组、映射和集合?
T.J*_*der 24
你使用它的size财产。Maps 和 Sets 都有它(这里和这里)。
const populatedSet = new Set(['foo']);
console.log(populatedSet.size); // 1
const populatedMap = new Map([['foo', 1]]);
console.log(populatedMap.size); // 1Run Code Online (Sandbox Code Playgroud)
(旁注:WeakMaps 和 WeakSets 没有size或它们的“强”对应物具有的其他几个特性,以保持它们的实现和使用它们的代码,理智。:-) 在它们具有相似功能的地方,它们提供相同的 API ,但它们不是子类。)
Shu*_*gps 17
您可以直接检查:
if (storeMapDetails.size == 0) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)