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

时间:2017-11-17 18:05:44

标签: javascript object ecmascript-6

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

1 个答案:

答案 0 :(得分:2)

  

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

不,只有在属性值为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);

不太优雅,但很灵活。