javascript使用默认值初始化对象中的每个值



我有以下代码来计算页面中的链接数量:

let temp = {}
for (const page of pages) { 
let count = temp[page.outgoingLinks.length];
if (!count) {
count = 0;
} 
count++;

temp[page.outgoingLinks.length]=count;
}

很抱歉使用像temp这样的变量名,因为我正在尝试显示一些代码,这些代码可以帮助您理解我要做的事情。在这里,我希望避免使用初始化值的if检查。

在本例中,默认值是一个整数。但我甚至想在那里存储一个数组,比如python中的defaultdict。关于如何在JS中做到这一点,有什么想法吗?

在JavaScript中没有什么比Python的defaultdict更好的了,但是在使用nullish合并运算符访问属性时可以有一个默认值:

let count = temp[page.outgoingLinks.length] ?? 0;

为了避免初始化值的if检查

for (const page of pages) { 
temp[page.outgoingLinks.length] = temp[page.outgoingLinks.length] ? temp[page.outgoingLinks.length]++ : 0;
}

在这里,您可以直接使用三元运算符来实现这一点。

如果需要多个默认值,可以创建一个包含默认值的对象。此对象可以在辅助函数中定义,该函数接受一个参数,该参数指定所需默认值的类型,并返回一个可以使用该值调用的函数。

如果该值为undefinednull,则此函数将返回所需类型的默认值。

function getInitializer(typeOfDefault) {
const defaults = {
arr: [0, 0, 0],
num: 0,
emptyString: ''
};
return (value) => value ?? defaults[typeOfDefault];
}
// default number
const initialize = getInitializer('num');
const a = initialize(0);
console.log(a);
// default array
const initialize2 = getInitializer('arr');
const b = initialize2(null);
console.log(b);