附加到变量而不重复值?

时间:2017-07-13 00:35:47

标签: javascript for-loop foreach while-loop ternary-operator

我有12个包含布尔值的变量。根据每个布尔输入为true,我将一个数值赋给另一个名为from datetime import datetime, timedelta from freeze_gun import freeze_time from other_module import some_code fake_today = datetime.datetime(2017, 7, 11) with_freeze_time(fake_today): some_code() # simulate passage of time to tomorrow with_freeze_time(fake_today + timedelta(days=1)) some_code() 的变量。我遇到的问题是我无法在不重复值的情况下找出如何附加到此变量finalInputValue。到目前为止,我有以下代码:

finalInputValue

正如您所看到的,此块基本上是将第一个数值赋给变量 var finalInputValue = "" function findFinalInputValue(){ if (finalInputValue == ""){ finalInputValue = boolean1Input == true ? "527" : boolean2Input == true ? "528" : boolean3Input == true ? "529" : boolean4Input == true ? "530" : boolean5Input == true ? "531" : boolean6Input == true ? "532" : boolean7Input == true ? "533" : boolean8Input == true ? "534" : boolean9Input == true ? "535" : boolean10Input == true ? "536" : boolean11Input == true ? "537" : boolean12Input == true ? "538" : ""; } if (finalInputValue != ""){ ... ... } } findFinalInputValue(); 。如何检查所有12个布尔输入,我怎么能让我的函数反复运行?如何在每个布尔值为真的附加数字值,而不复制其中一个值的函数?我还没有启动附加到第一个结果的函数的一部分,因为我不知道如何告诉函数忽略某个布尔输入(如果它已经被附加)。希望我已经清楚了。我只是想获得所有" true"的附加数字值字符串。布尔输入。最简单的方法是什么?一个for循环?使用数组?

4 个答案:

答案 0 :(得分:0)

又快又脏:

var output = "";
if( boolean1Input  ) output += "527,";
if( boolean2Input  ) output += "528,";
if( boolean3Input  ) output += "529,";
if( boolean4Input  ) output += "530,";
if( boolean5Input  ) output += "531,";
if( boolean6Input  ) output += "532,";
if( boolean7Input  ) output += "533,";
if( boolean8Input  ) output += "534,";
if( boolean9Input  ) output += "535,";
if( boolean10Input ) output += "536,";
if( boolean11Input ) output += "537,";
if( boolean12Input ) output += "538";
return output;

请注意,这可能包含您必须处理的,个字符。

快速且脏,但使用数组输出:

var output = [];
if( boolean1Input  ) output.push("527");
if( boolean2Input  ) output.push("528");
if( boolean3Input  ) output.push("529");
if( boolean4Input  ) output.push("530");
if( boolean5Input  ) output.push("531");
if( boolean6Input  ) output.push("532");
if( boolean7Input  ) output.push("533");
if( boolean8Input  ) output.push("534");
if( boolean9Input  ) output.push("535");
if( boolean10Input ) output.push("536");
if( boolean11Input ) output.push("537");
if( boolean12Input ) output.push("538");
return output;

简洁但危险:

var output = [];
for( var i = 1; i <= 12; i++ ) {
    var input = eval('boolean' + i + 'Input');
    if( input ) output.push( i + 526 ); 
}

答案 1 :(得分:0)

使用数组而不是许多单独的变量。

function findFinalInputValue(inputs) {
    if (finalInputValue == "") {
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i] == true) {
                finalInputValue += (527 + i).toString();
            }
        }
    }
    if (finalInputValue != "") {
        ...
    }
}

findFinalInputValue(booleanInputs);

答案 2 :(得分:0)

你可以使用json跟踪附加值

Access-Control-Allow-Origin

通过获取所有键,您可以在完成循环后获得最终值 Finalvalue.Keys()

答案 3 :(得分:0)

我强烈建议您使用数组存储输入,这非常方便。假设我们有这样的输入:

const CODES = ["527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538"];
const inputs = [boolean1Input, boolean2Input, boolean3Input, boolean4Input, boolean5Input, boolean6Input, boolean7Input, boolean8Input, boolean9Input, boolean10Input, boolean11Input, boolean12Input];

然后只需使用:

[...CODES.keys()]
    .filter(x => inputs[x])
    .map(x => CODES[x])

首先过滤掉所有错误输入,然后将剩余索引映射到相应的代码。

但是,如果无法使用数组输入,我会编写如下代码:

[
    boolean1Input  && "527",
    boolean2Input  && "528",
    boolean3Input  && "529",
    boolean4Input  && "530",
    boolean5Input  && "531",
    boolean6Input  && "532",
    boolean7Input  && "533",
    boolean8Input  && "534",
    boolean9Input  && "535",
    boolean10Input && "536",
    boolean11Input && "537",
    boolean12Input && "538",
].filter(x => x) // filter out false values