在执行对象解构时,如果键不存在(即 undefinedKey),可以提供默认值。
如果(字符串)键确实存在,它不会被覆盖(即使为空)。
我想知道是否可以在解构时指定空字符串的覆盖。在下面的示例中,我希望
emptyKey
打印 Override for empty key
const testObject = {
emptyKey: '',
filledKey: 'Some Initial Value',
};
const {
emptyKey = 'Override for empty key',
filledKey = 'Override for filled key',
undefinedKey = 'Override for undefined key',
} = testObject;
console.log(emptyKey); //''
console.log(filledKey); //'Some Initial Value'
console.log(undefinedKey); //'Override for undefined key'
我想知道是否可以在解构时为空字符串指定覆盖。
否,仅当属性值为
undefined
时才考虑默认值。无法覆盖此行为。
作为解决方法,您可以构建自己的小默认值处理程序,例如
function defaults(obj, test, defaults) {
return Object.keys(defaults).reduce((acc, prop) => {
acc[prop] = test(obj[prop]) ? defaults[prop] : obj[prop];
return acc;
}, {});
}
const testObject = {
emptyKey: '',
filledKey: 'Some Initial Value',
};
const {
emptyKey,
filledKey,
undefinedKey,
} = defaults(
testObject,
v => v === undefined || v === '',
{
emptyKey: 'Override for empty key',
filledKey: 'Override for filled key',
undefinedKey:'Override for undefined key',
}
);
console.log(emptyKey, filledKey, undefinedKey);
不太优雅,但灵活。
我不确定
flatMap
是否已经存在于 7 年前,但至少现在你可以在你的东西上的地图上返回 undefined
。如果是 object
,您需要使用 Object.keys
和 flatMap
,对于数组 map
就足够了。
const testObject = {
emptyKey: '',
filledKey: 'Some Initial Value',
};
const [
emptyKey = 'Override for empty key',
filledKey = 'Override for filled key',
undefinedKey = 'Override for undefined key',
] = Object.keys(testObject).flatMap(prop => {
return !testObject[prop] ? undefined : testObject[prop]
});
console.log(emptyKey); //'Override for empty key'
console.log(filledKey); //'Some Initial Value'
console.log(undefinedKey); //'Override for undefined key'