我写了以下代码:
var json = {};
var test = {
run: function(json)
{
var choice = (function(){
if (json.a != '' && json.b == '' && json.c == ''){ return 'a'} else
if (json.a == '' && json.b != '' && json.c == ''){ return 'b'} else
if (json.a == '' && json.b == '' && json.c != ''){ return 'c'} else
if (json.a != '' && json.b != '' && json.c == ''){ return 'd'} else
if (json.a != '' && json.b == '' && json.c != ''){ return 'e'} else
if (json.a == '' && json.b != '' && json.c != ''){ return 'f'} else
return 'g';
})();
switch (choice)
{
case 'a': console.log('a');
break;
case 'b': console.log('b');
break;
case 'c': console.log('c');
break;
case 'd': console.log('d');
break;
case 'e': console.log('e');
break;
case 'f': console.log('f');
break;
case 'g': console.log('no arguments');
}
}
};
json.a = 'xxx';
json.b = '';
json.c = 'yyy';
test.run(json);
这会返回“e”,但json每次都会有所不同。
当每个“if”语句都有很多代码行时,这个代码结构更清晰易读。
想象一下:
if(statement){
//100 lines of code
}else
if(statement){
//100 lines of code
}else ........
//and so on.
我想知道有什么样的设计模式比这个解决方案更好吗? 我很感激你的帮助。
答案 0 :(得分:1)
方式更容易。循环遍历json
循环中的for in
,如果有任何输入,请将该密钥设置为output
。如果之后有另一个输入,则返回“Bad arguments”。如果测试完成,请返回output
。
var json = {};
var test = {
run: function(json)
{
var output = null;
for (var s in json) {
if (json[s]) {
if (output) {
return "Bad arguments.";
} else {
output = s;
}
}
}
return output;
}
}
json.a='xxx';
json.b='';
json.c='';
console.log(test.run(json));
答案 1 :(得分:0)
那么,您将如何捕获用户的输入?如果这些属性彼此独占,那么您很可能使用单选按钮作为捕获输入的方式。您一次只能选择一个单选按钮。然后就不需要检查所有三个属性了。只需检查一下,无论哪个有价值,都要退货。
var choice = (function(){
if (json.a != '') { return 'a'; }
if (json.b != '') { return 'b'; }
if (json.c != '') { return 'c'; }
return 'd';
}
答案 2 :(得分:0)
您可以使用多种数组和对象方法
例如
var res= [json.a,json.b,json.c,json.d].filter(function(str){
return str.length;
});
var output= res.length==1 ? res[0] : "Bad args";
查看您正在使用的JSON将有助于更多
的 DEMO 强>
答案 3 :(得分:0)
我找到了解决方案:
var json = {};
var test = {
run: function(json)
{
var output='';
var func =[];
for (var s in json) {
if (json[s]) {
output +=s;
}
}
func['a'] = function()
{
return console.log('a');
}
func['b'] = function()
{
return console.log('b');
}
func['c'] = function()
{
return console.log('c');
}
func['ab'] = function()
{
return console.log('ab')
}
func['ac'] = function()
{
return console.log('ac')
}
func['bc'] = function()
{
return console.log('bc')
}
func[''] = function()
{
return console.log('bad arguments')
}
func[output]();
}
}
json.a='xxx';
json.b='';
json.c='yyy';
test.run(json);