【问题标题】:How do I make this javascript more eloquent without using objects and switch statements?如何在不使用对象和 switch 语句的情况下使这个 javascript 更雄辩?
【发布时间】:2014-09-27 18:15:14
【问题描述】:

我不想输入所有可能的价格组合,但我已经搜索了很长时间,但找不到更好的方法:

var selection = new Array (4);
selection[0] = new Array ('$210' 'etc', 'etc', 'etc', 'etc');
selection[1] = new Array ('Solar', 'Supernova', 'Quasar', 'Galaxy', 'Blackhole');
selection[2] = new Array ('Talk', 'Talk & Text', 'Talk, Text & Data');
selection[3] = new Array ('One Year', 'One', 'Two Years', 'Two', 'Three Years', 'Three', 'Four Years', 'Four');



function selectPhone () {

    var yourPhone = prompt("What kind of Smartphone would you like: Solar: $100, Supernova: $200, Quasar: $300, Galaxy: $400, Blackhole: $500?");

    if (yourPhone == selection[1][0]) {
        console.log("You picked: " + yourPhone + "."), selectPlan ();
    } else {
        console.log("Error.");
    }
}



function selectPlan () {

    var yourPlan = prompt("What Plan Would You Like: Talk: $10, Talk & Text: $20 or Talk, Text & Data: $30?");

    if (yourPlan == selection[2][0]) {
        console.log("You picked: " + yourPlan + "."), selectTerm ();
    } else {
        console.log("Error.");
    }
}



function selectTerm () {

    var yourTerm = prompt("What Term Would You Like: One Year: $100, Two Years: $200, Three Years: $300 or Four Years: $400?");

    if (yourTerm == selection[3][0] || selection [3][1]) {
        console.log("You picked: " + selection[3][0] + ". \n Your total is: " + selection[0][0]);
    } else {
        console.log("Error.");
    }
}


selectPhone ();

我不知道如何对其进行编程,因此它只能拾取所做的选择并将它们转换为数值并对其执行简单的加法。我是初学者,所以请解释一切。非常感谢!!

【问题讨论】:

  • 对象使这个美丽。为什么不想为数组数据使用简单的基于 JSON 的结构?
  • 我需要在没有他们的情况下这样做。只有 if 语句、函数、变量和数组。
  • 这听起来像是一个家庭作业助手。
  • ...Holy Stack Overflow 上不允许这样做吗?
  • 我不在乎这是否是作业,对我来说无所谓。但这就是你不能使用对象的原因吗?

标签: javascript arrays function variables if-statement


【解决方案1】:

您可以在需要转换为整数的地方使用类似 parseInt() 的东西。这是文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

【讨论】:

  • 我尝试实现了一段时间,但它不起作用。但我想我会继续努力。谢谢。
  • 只是将两个数字并排放置,而不是相加。
  • 在定义变量之前的+ 与 parseInt() 相同,但更短。所以不是x = parseInt(prompt()),而是x = +prompt();
  • 我不知道!感谢@Brendan 的提示。
  • 没问题。制作 javascript 的人决定给 + 标志 3 或 4 件它可以做的事情,我不明白,但它很方便
【解决方案2】:

你这样做:

var selection = new Array (4);
selection[0] = new Array ('$210', 'etc', 'etc', 'etc', 'etc');
selection[1] = new Array ('Solar', 'Supernova', 'Quasar', 'Galaxy', 'Blackhole');
selection[2] = new Array ('Talk', 'Talk & Text', 'Talk, Text & Data');
selection[3] = new Array ('One Year', 'One', 'Two Years', 'Two', 'Three Years', 'Three', 'Four Years', 'Four');


function selectPhone (selectionArray) {
    var yourPhone = prompt("What kind of Smartphone would you like: Solar?");
    for( s1 in selectionArray ){
        for( s2 in selectionArray[s1] ) {
            if (yourPhone == selectionArray[s1][s2] ) {
                console.log("You picked: " + yourPhone + ".");
            } else {
                console.log("Error.");
            }
        }
    }
}

selectPhone(selection);

不过,您确实需要了解对象。还要查看 JS 中的 for .. in 函数 - 文档会比我更好地解释它,但简而言之,您循环遍历父数组的属性(使用 for..in) - 基本上是通过数组列表。与使用相同的想法相比,您可以部分循​​环遍历每个数组。为了给你一个视觉表示,你的数组看起来像这样:

var selection  = [//outer array
                    [ //inner array - property of outer array (first for..in) = s1
                       '$210', //property of inner array (second for..in) = s2                          
                       'etc'
                    ], 
                    [ 'Solar', 'Supernova', 'Quasar', 'Galaxy', 'Blackhole' ], 
                    [ 'Talk', 'Talk & Text', 'Talk, Text & Data' ],
                    [ 'One Year', 'One', 'Two Years', 'Two', 'Three Years', 'Three', 'Four' ]
                ]

【讨论】:

  • No, you wouldn't。请使用正确的循环。
  • 顺便说一句,您的console.log('Error') 似乎放错了位置,在内部循环中没有多大意义。
  • @Bergi 我为满足他的特定需求而使用的特定示例是完全有效的(并且比 array.length 更好)-尽管我同意它并不适合每种情况。 console.log 也放在需要的地方。下次请检查代码,然后再发表评论。
  • 我必须承认我没有足够仔细地查看您的代码。我又做了一次,只是发现了更多的错误——如果可以的话,我会第二次投反对票。下次在你回答之前试试你的代码。提示:无论输入如何,它目前只记录Error 21 次
  • @Bergi 啊,你说得对。我忘记了对象本身。不过,您对数组问题的迭代仍然是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
相关资源
最近更新 更多