gpt4 book ai didi

javascript - 检查参数是否存在并在数组中,或设置为默认值

转载 作者:行者123 更新时间:2023-11-29 17:18:39 24 4
gpt4 key购买 nike

我正在尝试清理一些旧代码,想知道是否有一个干净的单行解决方案来处理类似以下的问题。

function dates(format) {
var formats = ['DD/MM/YYYY','MM/DD/YYYY'];
// is there a one liner for something like this? If format is undefined this will throw an error when evaluating formats.indexOf(format)
format = (typeof format !== 'undefined' && formats.indexOf(format) >= 0) ? format : 'MM/DD/YYYY';

// ...

format 是一个函数的参数,我想做一些初步检查以确保输入已给出,并且符合数组中的条件。

最佳答案

你的代码在我看来很好,除了 ==undefined 检查是多余的。

function dates(format) {
var formats = ['DD/MM/YYYY','MM/DD/YYYY'];
format = formats.indexOf(format) >= 0 ? format : 'MM/DD/YYYY';
}

请注意,如果您不带任何参数调用 dates(),这将不会抛出异常。

如果你有很多这样的代码,你可以考虑使用像这样的实用函数

function oneOf(item /*, args */) {
args = [].slice.call(arguments, 1)
return args.indexOf(item) >= 0 ? item : args[0];
}

然后:

function dates(format) {
format = oneOf(format, 'MM/DD/YYYY', 'DD/MM/YYYY')
}

如果您决定按照 Felix 的建议使用一个对象,最好像这样构造它:

var formats = {
'DD/MM/YYYY': 'DD/MM/YYYY',
'MM/DD/YYYY': 'MM/DD/YYYY',
};

乍一看这看起来很愚蠢,但有两个重要的优点。首先,in 检查很简单

 format = formats[format] || 'DD/MM/YYYY'

其次,您可以扩展它来为您的值提供别名:

var formats = {
'DD/MM/YYYY': 'DD/MM/YYYY',
'MM/DD/YYYY': 'MM/DD/YYYY',
'english': 'M/D/YYYY'
'german': 'DD.MM.YYYY'
};

dates('german')

关于javascript - 检查参数是否存在并在数组中,或设置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com