Switch case传递多个值

时间:2017-12-04 13:17:01

标签: javascript jquery angularjs

我有四个动态输入。用户选择想要的数量。 在输入中,他输入文章ID,成功后我在URL中发送。 网址只能包含两个或三个或四个

'http://someurl/' + ID + '/someParams'
example: 'http://someurl/991,992,993,994/someParams'

我将ID从html传递给控制器​​

$scope.submitChoice = function (name) {
    $scope.choices.forEach(function(choice, index){
        if(choice.name)
        {
            switch (index) {
                case 0:
                    var firstId = choice.name;
                    break;
                case 1:
                    var secondId = choice.name;
                    break;
                case 2:
                    var thirdId = choice.name;
                    break;
                case 3:
                    var fourthId = choice.name;
                    break;
            }
            console.log(firstId, secondId, thirdId, fourthId);
            $scope.getBenchIdForCompare(firstId, secondId, thirdId,fourthId);
        }
    })
}    

我使用SWITCH CASEINDEX因为我需要将每个ID设置为唯一的var(因为我的应用程序的另一部分)。 问题是,当我在输入中提交输入的ID时,我在我的控制台中得到了这个     console.log(firstId, secondId, thirdId, fourthId);

控制台

991 undefined undefined undefined
undefined 992 undefined undefined
undefined undefined 993 undefined
undefined undefined undefined 994

我无法将此传递给另一个函数,因为我需要991 992 993 994

还有另一种方法吗?

2 个答案:

答案 0 :(得分:2)

您可以改为使用map并创建array。创建array后,您可以使用join()方法加入它们,您将获得现成的逗号分隔字符串。可以添加此逗号分隔的字符串以获取所需的URL。

$scope.submitChoice = function(name) {
  var choices = $scope.choices.map(function(choice){
    return choice.name;
  });
  console.log(choices.join(','));
  $scope.getBenchIdForCompare(choices[0], choices[1], choices[2], choices[3]);
}

ES6版本(使用点差运算符):

$scope.submitChoice = function(name) {
  let choices = $scope.choices.map(choice => choice.name)
  console.log(choices.join(','));
  $scope.getBenchIdForCompare(...choices);
}

答案 1 :(得分:1)

这里发生的是你在选择数组的每个元素上调用函数。每个元素都有一个唯一的索引。这导致switch语句的情况对于每个元素只有一次为真。但是,由于您循环遍历选择数组,其他三个变量永远不会被赋予任何值。因此undefined s 我建议将变量的声明及其用法移出forEach循环。只需使用forEach分配值,然后代码就可以正常工作