设置 ES6 默认参数以处理空字符串

Setting ES6 default arguments to handle empty strings

下面我有一个对象,键值映射。

const COLORS_BY_TYPE = {
  RED: 'red',
  BLUE: 'blue',
  GREEN: 'green',
};

const getCorrectColor = ({ colorType = 'GREEN' }) => COLORS_BY_TYPE[colorType.toUpperCase()];

我有类似上面的东西,当我调用 getCorrectColor 时它工作正常,而我没有传递它相关的正确道具。当我传递一个空字符串时,它无法正常工作。我将如何修改以上内容,以便如果 prop 是空字符串,它将恢复为默认颜色。

任何人都可以提供一个简单的示例来说明我正在寻找的功能类型吗?

我想你正在寻找

function getCorrectColor({colorType = ''}) {
    const key = colorType.toUpperCase();
    return COLORS_BY_TYPE[key in COLORS_BY_TYPE ? key : 'GREEN'];
}

只有当默认参数代表的参数值为 undefined 时,才会应用默认参数。因此,当您传递一个空字符串时,默认值不会应用于该参数。但是,因为在 JavaScript 中可以将空字符串强制为 false,您可以在函数体中使用 OR (||) 来获得您想要的结果。

此代码应该可以解决您的问题:

const COLORS_BY_TYPE = {
RED: '#ffffff'
BLUE: '#ffffff'
GREEN: '#ffffff'
}

const getCorrectColor = ({colorType = 'GREEN'}) =>
COLORS_BY_TYPE[(colorType || "GREEN").toUpperCase()];

在这里,我们将 colorType 的读数包裹在一对括号中,并在它是可以强制转换为 false 的值时提供第二个值——这个新值是字符串"GREEN"。括号确保它首先执行,并且它给出的任何值都是调用其 toUpperCase() 方法的值。

另一种可能性是Map。显然,这需要您更改设置(而不是使用对象字面量),但 Map 允许您使用空字符串作为键。

const COLORS_BY_TYPE = new Map()
COLORS_BY_TYPE.set('RED', '#f00')
COLORS_BY_TYPE.set('BLUE', '#00f')
COLORS_BY_TYPE.set('GREEN', '#0f0')
COLORS_BY_TYPE.set('', COLORS_BY_TYPE.get('GREEN'))

const getCorrectColor = ({
  colorType
}) => COLORS_BY_TYPE.get(colorType.toUpperCase())

console.log(getCorrectColor({
  colorType: 'GREEN'
}))
console.log(getCorrectColor({
  colorType: ''
}))

我不知道你为什么要使用解构赋值,但这对我有用:

const COLORS_BY_TYPE = {
RED: '#ff0000',
BLUE: '#0000ff',
GREEN: '#00ff00'
}

const getCorrectColor = (colorType = 'GREEN') =>
COLORS_BY_TYPE[colorType.toUpperCase() in COLORS_BY_TYPE ? colorType.toUpperCase() : 'GREEN'];

console.log(getCorrectColor())
console.log(getCorrectColor(''))
console.log(getCorrectColor('red'))