gpt4 book ai didi

javascript - 使用多个参数创建一个检查以产生三个不同的结果

转载 作者:行者123 更新时间:2023-11-29 16:47:48 24 4
gpt4 key购买 nike

我需要找到最简洁的方法来基于两个参数返回三个值之一。我认为 switch 语句是最简洁的,但请提出替代方案。

我有两个参数,typeaction

如果action == 'close' 那么返回的结果应该总是'Hide'

如果 action == open 则需要更多检查

如果 action == 'open' && type == 'flight' 返回 show more flights

如果 action == 'open' && type == 'protection' 返回 show protections

在不涉及多个嵌套的 if 语句的情况下,最简洁的方法是什么?整个语句已经在另一个由三元调用的 if 语句中,所以我真的不想添加更多。

这是我目前的解决方案,有什么方法可以使它更轻吗?

createShowLabels: function(testEnabled,action,type){
if (testEnabled){
if(action === 'open'){
switch(type) {
case 'flight':
return 'Show flight times';
case 'protection':
return 'What\'s this?';
}
} else {
return 'Hide';
}
} else {
// Defaults
if (action === 'open'){
return 'Show more';
} else {
return 'Show less';
}
}
},

最佳答案

首先,让我们明确一点:“简洁”不是“好”、“可读”或“可维护”的同义词。 有时简洁的代码是好的、可读的和可维护的;有时,它不是。

鉴于您在评论中保证值是列出的值,有几种方法。

在我自己的代码中,我可能会使用像 FDavidov's answer 这样的东西但格式不同:

if (action == 'close') {
result = 'Hide';
} else if (type == 'flight') {
result = 'show more flights';
} else {
result = 'show protections';
}

但是你要求的是最简洁的方式。条件运算符很简洁,但不一定非常容易调试:

result = action == 'close' ? 'Hide' : type == 'flight' ? 'show more flights' : 'show protections';

例子:

function test(action, type) {
return action == 'close' ? 'Hide' : type == 'flight' ? 'show more flights' : 'show protections';
}
console.log(test('close', 'flight'));
console.log(test('close', 'protections'));
console.log(test('open', 'flight'));
console.log(test('open', 'protections'));


这些都不那么简洁,但更可配置:

您可以使用查找对象:

var lookup = {
'close|flight': 'Hide',
'close|protections': 'Hide',
'open|flight': 'show more flights',
'open|protections': 'show protections'
};

result = lookup[action + '|' + type];

例子:

var lookup = {
'close|flight': 'Hide',
'close|protections': 'Hide',
'open|flight': 'show more flights',
'open|protections': 'show protections'
};

function test(action, type) {
return lookup[action + '|' + type];
}
console.log(test('close', 'flight'));
console.log(test('close', 'protections'));
console.log(test('open', 'flight'));
console.log(test('open', 'protections'));

或者如你所说,一个开关:

switch (action + '|' + type) {
case 'close|flight': result = 'Hide'; break;
case 'close|protections': result = 'Hide'; break;
case 'open|flight': result = 'show more flights'; break;
case 'open|protections': result = 'show protections'; break;
};

例子:

function test(action, type) {
var result;
switch (action + '|' + type) {
case 'close|flight': result = 'Hide'; break;
case 'close|protections': result = 'Hide'; break;
case 'open|flight': result = 'show more flights'; break;
case 'open|protections': result = 'show protections'; break;
};
return result;
}
console.log(test('close', 'flight'));
console.log(test('close', 'protections'));
console.log(test('open', 'flight'));
console.log(test('open', 'protections'));

关于javascript - 使用多个参数创建一个检查以产生三个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39143635/

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