Add support for maps and sets to _.isEmpty. [closes #2159]

This commit is contained in:
John-David Dalton
2016-03-27 13:03:30 -07:00
parent 75727d073b
commit c3a614858b
2 changed files with 45 additions and 3 deletions

View File

@@ -10361,11 +10361,15 @@
} }
/** /**
* Checks if `value` is an empty object or collection. A value is considered * Checks if `value` is an empty object, collection, map, or set.
* empty if it's an `arguments` object, array, buffer, string, or jQuery-like *
* collection with a length of `0` or has no own enumerable string keyed * Objects are considered empty if they have no own enumerable string keyed
* properties. * properties.
* *
* Array-like values such as `arguments` objects, arrays, buffers, strings, or
* jQuery-like collections are considered empty if they have a `length` of `0`.
* Similarly, maps and sets are considered empty if they have a `size` of `0`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @since 0.1.0 * @since 0.1.0
@@ -10400,6 +10404,12 @@
return false; return false;
} }
} }
if (isObjectLike(value)) {
var tag = getTag(value);
if (tag == mapTag || tag == setTag) {
return !value.size;
}
}
return true; return true;
} }

View File

@@ -8744,6 +8744,38 @@
assert.strictEqual(_.isEmpty(new Foo([])), true); assert.strictEqual(_.isEmpty(new Foo([])), true);
}); });
QUnit.test('should work with maps', function(assert) {
assert.expect(4);
if (Map) {
lodashStable.each([new Map, realm.map], function(map) {
assert.strictEqual(_.isEmpty(map), true);
map.set('a', 1);
assert.strictEqual(_.isEmpty(map), false);
map.clear();
});
}
else {
skipAssert(assert, 4);
}
});
QUnit.test('should work with sets', function(assert) {
assert.expect(4);
if (Set) {
lodashStable.each([new Set, realm.set], function(set) {
assert.strictEqual(_.isEmpty(set), true);
set.add(1);
assert.strictEqual(_.isEmpty(set), false);
set.clear();
});
}
else {
skipAssert(assert, 4);
}
});
QUnit.test('should not treat objects with negative lengths as array-like', function(assert) { QUnit.test('should not treat objects with negative lengths as array-like', function(assert) {
assert.expect(1); assert.expect(1);