如何为解构对象中的空字符串提供默认值

问题描述 投票:0回答:2

在执行对象解构时,如果键不存在(即 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'

javascript object ecmascript-6
2个回答
4
投票

我想知道是否可以在解构时为空字符串指定覆盖。

否,仅当属性值为

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);

不太优雅,但灵活。


0
投票

我不确定

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'

© www.soinside.com 2019 - 2024. All rights reserved.