从switch语句返回值

时间:2018-09-04 02:56:56

标签: javascript arrays function switch-statement return

我是Web开发(JS)的新手,我知道有很多主题与我的标题匹配,但没有回答类似的问题,或者可能是因为我是新手,所以找不到。

在下面的代码中,我希望我的函数和switch语句能够从数组(清单)中检索值,并计算新值,并将其分配到数组{{1}中的新不存在位置中}。作为最终结果,我希望函数根据情况返回带有值的tips数组。

我知道解决此问题的另一种方法,无论如何我想知道这里出了什么问题,因为关于tips的想法首先出现在我的脑海中,我认为它会起作用。

这是我的代码:

solving

3 个答案:

答案 0 :(得分:0)

嗯,这不是一个好方法,但是如果您需要使用Switch,则可以尝试完全不使用bills数组的方式:

!#/bin/bash

...
search(){
    echo "search log is $searchlog_bank"
    read -p "Press Enter to continue..."
    if [ saveconfirm_bank!=“NOT SAVING SEARCH LOG” ]; then
        egrep -io “.*keyword_bank.*” $csvfile_bank | tee ./$searchlog_bank
        read -p “<Search complete. Press Enter to continue>”
        savelog_bank=“<NOT SAVING SEARCH LOG>”
        clear
        menu_display
    else
        egrep -io ".*$keyword_bank.*" $csvfile_bank
        read -p "<Search complete. Press Enter to continue...>"
        clear
        menu_display
        fi
}

#script init global variables
csvfile_bank="<NOT LOADED>"
searchlog_bank="<NOT SAVING A SEARCH LOG>"
fileext_bank="<NOT ENTERED>"
keyword_bank="<NOT ENTERED>"
regex_bank="<NOT ENTERED>"

#main script body
clear
menu_display
while [ $selection != “8” ]; do
    case $selection in
        1) readcsv;;
        2) enter_searchlog;;
        3) readext;;
        4) readkeyword;;
        5) readregex;;
        6) clearparam;;
        7) search;;
        8) echo "See You Space Cowboy"
           break;;
        *) menuerror;;
    esac
done

...

或者如果您需要比较bills数组,并取决于将值插入tips数组,我会这样:

super(props)

答案 1 :(得分:0)

让我们将这段代码分解一下,讨论一下它的作用

var tips = [];
var bills = [124, 48, 264];

这部分是在全局范围内声明两个变量,任何函数都可以访问它们以进行读写(重要的-Google JS闭包)。

function tipCalc(bills, tips){
 switch(bills){

您现在已经启动了一个函数,该函数调用开关来评估账单的价值。因为您要传递bills[0],所以它将评估帐单[0](124)。它还接受第二个称为tips的参数,该参数是未定义的,因为调用该函数时不会传递第二个参数。

case bills < 50:
  tips[0] = bills[1] * 0.2;
  break;

这部分坏了。如果将其更改为if语句,则其结果将为false。

case bills > 50:
  tips[1] = bills[0] * 0.5;
  break;

也坏了。如果更改为if语句,它将评估为true并被执行,但是它将对未定义执行操作。如果没有第二个参数,也称为tips,则应将全局tips设置为62。

    default:
      console.log('no tips left.');
  }

这是当前应执行的部分,因为它是唯一可以正确执行的部分,而其他两种情况的结构也不正确。

  return tips;
}

将返回不确定的,因为提示(在函数本身的范围内)以不确定的开头并且未更改。

  tips = tipCalc(bills[0]);
  console.log(tips);
  enter code here

破坏整个程序,应该在开头加上//

答案 2 :(得分:0)

这是执行我认为要执行的操作的详细方法。 (总计小费)

// create a blank tips array which we'll add to later
var tips = [];
// our bills array
var bills = [124, 48, 264];
// create a function that will calculate tips based on the bill totals
function calculateTips() {
  // create a counter that we will use to determine when we've reached the end of the loop
  var forEachCounter = 0;
  // for each will loop through each item in the bills array
  bills.forEach(function(amount) {
    //this increases the counter by 1 on each loop
    forEachCounter++;
    switch(true) {
      case (amount <= 50):
        // .push appends to the array
        tips.push(amount * 0.2);
        break;
      case (amount > 50):
        // amount is the value of the bill for this iteration * 0.5
        tips.push(amount * 0.5);
        break;
    }
    // if end of array has been reached
    // bills.length = the total amount of array items in bills arrat
    if (forEachCounter === bills.length) {
      // create a totalTips variable to add to
      var totalTips = 0;
      // create another counter to detect when end is reached
      var forEachCounter2 = 0;
      // loop through the tips array
      tips.forEach(function(tipamount) {
        // add 1 to counter on each loop
        forEachCounter2++;
        // add to totalTips
        // can also do totalTips = totalTips + tipamount;
        totalTips += tipamount;
        // when end of tip array is reached..
        if (forEachCounter2 === tips.length) {
          //alert(totalTips);
          // output it to where you need it
          document.getElementsByTagName('body')[0].innerHTML = totalTips;
        }
      })
    }
  })
}
// call it when you need it
calculateTips();

注释

如果您正在使用许多技巧(例如整个国家饭店连锁店),则可能要考虑使用if / else而不是使用switch,因为switch is demonstrated to be slower with ranges

在此处进行修饰

https://jsfiddle.net/Hastig/p1kfgreq/