如何通过值将二维数组传递给函数

时间:2016-01-07 08:14:23

标签: javascript arrays multidimensional-array

我试图将2d数组传递给函数。但是当我在setParams中遍历数组时,数组中有一些额外的值(case中的每个switch都会发生),我不知道它们会在哪里来从。

function setParams(button, params) {


        $mydialog = $("#dialog").dialog({
            autoOpen: true,
            buttons: {
                "ok": function() {
                     $(this).dialog("close");
                     for(var key in params) {
                        var value = params[key].toString();

                        var arr = value.split(',');
                        alert(arr[0] + "        " + arr[1]);

                        var control = $("#dialog").find('input[name='+arr[1]+']');

                        if (control.is(':checkbox'))
                        {
                            button.data('id')[arr[0]] = control.is(":checked");
                        }
                        else
                        {
                            button.data('id')[arr[0]] = control.val();
                        }
                     }
                     sendRequest(button);
                 },
                "cancel": function() {
                    $(this).dialog("close");
                 }
             }
        });
    }

菜单功能

$(function() {
        $('#navigationMenu a').click(function(e) {
            e.preventDefault();
            e.stopPropagation();

            var button = $(this);
            var cl = button.attr("class");
            console.log(button.attr('href'));

            switch(cl) {
                case "input-params":
                    $('.id').show();
                    $('.requestDate').hide();
                    $('.startEndDate').hide();
                    setParams(button, [["id","id"]]);   
                    break;
                case "input-params-location":
                    $('.id').show();
                    $('.requestDate').hide();
                    $('.startEndDate').hide();
                    setParams(button, [["locationId","id"]]);   
                    break;
                case "input-params-openinghours":
                    $('.id').show();
                    $('.requestDate').show();
                    $('.startEndDate').hide();
                    var myArray = [["locationId","id"],["requestDate","date"]];
                    setParams(button, myArray);
                    break;
               case "input-params-allocations":
                    $('.id').hide();
                    $('.requestDate').hide();
                    $('.startEndDate').show();
                    setParams(button, [["startDate","startDate"],["endDate","endDate"],["includeGroupActivities","includeGroupActivities"]]);
                    break;
               case "input-params-allocations-id":
                    $('.id').show();
                    $('.requestDate').hide();
                    $('.startEndDate').show();
                    setParams(button, [["id","id"],["startDate","startDate"],["endDate","endDate"],["includeGroupActivities","includeGroupActivities"]]);
                    break;
               default:
                    sendRequest(button)
            }

        });
    });

除了我传递的值,这些值也在数组中

1)

function (){return v;
}   undefined

2)

function Array() {[native code]}   undefined

3)

function (i  v)Array.forEach(this

如何在不获取额外值的情况下以正确的方式传递数组?

1 个答案:

答案 0 :(得分:0)

从你的代码中不清楚你对2d数组的意思,因为对我来说它只是一个带字符串值的数组。

您获得的额外值是array-object上的函数。当您执行for-in循环时,您将遍历对象属性。在数组的情况下,这是数组的内容(属性“0”,“1”等)和本机函数。如果要循环遍历数组的内容,则应使用常规for循环或数组中存在的forEach函数。

如果您想立即使用for-in循环,可以检查属性是来自原型还是存在于具有hasOwnProperty - 函数的实例上。

for(var key in params) {
  if(!params.hasOwnProperty(key){
    return;
  }

//rest of the code
}