defaultdict
是 Python 标准库 collections
模块中的一个类,它继承自内置的 dict
类。defaultdict
在访问不存在的键时会自动创建一个默认值,而不抛出 KeyError
异常。这使得它在处理数据时更加方便。
然而,JavaScript 并没有内置的 defaultdict
类。不过,我们可以通过一些技巧来实现类似的功能。
我们可以通过在 JavaScript 中定义一个类来模拟 defaultdict
的行为。以下是一个简单的实现:
class DefaultDict {
constructor(defaultFactory) {
this.defaultFactory = defaultFactory;
this.items = {};
}
get(key) {
if (!(key in this.items)) {
this.items[key] = this.defaultFactory();
}
return this.items[key];
}
set(key, value) {
this.items[key] = value;
}
has(key) {
return key in this.items;
}
delete(key) {
delete this.items[key];
}
}
以下是如何使用这个 DefaultDict
类的示例:
const defaultdict = new DefaultDict(() => []);
defaultdict.get('fruits').push('apple');
defaultdict.get('fruits').push('banana');
console.log(defaultdict.get('fruits')); // 输出: ['apple', 'banana']
defaultdict.set('fruits', ['orange']);
console.log(defaultdict.get('fruits')); // 输出: ['orange']
console.log(defaultdict.has('fruits')); // 输出: true
defaultdict.delete('fruits');
console.log(defaultdict.has('fruits')); // 输出: false
KeyError
异常。() => []
返回一个空数组,() => {}
返回一个空对象。原因:JavaScript 中的对象是引用类型,如果默认工厂函数返回的是一个对象,那么所有键共享同一个对象。
解决方法:确保默认工厂函数返回的是一个新的对象或数组。
const defaultdict = new DefaultDict(() => ({}));
defaultdict.get('config').key = 'value';
console.log(defaultdict.get('config')); // 输出: { key: 'value' }
defaultdict.get('anotherConfig').key = 'anotherValue';
console.log(defaultdict.get('anotherConfig')); // 输出: { key: 'anotherValue' }
通过这种方式,每个键都会有自己独立的对象,不会相互影响。
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云