【问题标题】:javascript: pass an array to a functionjavascript:将数组传递给函数
【发布时间】:2012-10-27 01:13:33
【问题描述】:

这是我的 javascript 代码:

var my_array = new Array();
my_array[0] = "a";
my_array[0] = "b";
my_array[0] = "c";

print_array(my_array);

function print_array(arr)
{
   alert(arr);
}

但它不起作用,因为我无法将数组传递给函数。那么,如何将整个数组传递给 javascript 函数?

编辑: 没关系。我找到了解决方案。
隐藏原因这是不好的做法,并将数组作为字符串传递:

如果有人需要将一个数组传递给函数,首先使用这个:JSON.stringify() 并且 javascript 将能够解析一个数组。

【问题讨论】:

    标签: javascript arrays function


    【解决方案1】:

    问题是您将每个元素分配给索引0,因此它们相互覆盖。

    // should be
    my_array[0] = "a";
    my_array[1] = "b";
    my_array[2] = "c";
    
    // alternatively, if you don't want to track the index
    my_array.push("a");
    my_array.push("b");
    my_array.push("c");
    

    其余的代码看起来不错。您可以完全按照您在代码中显示的方式将整个数组或任何对象传递给函数。

    当你提醒它时,javascript 会将数组连接成一个逗号分隔的字符串以便于查看。

    【讨论】:

    • my_array.push("a", "b", "c")
    • @roberkules:我喜欢那个,我认为你应该为此获奖。
    • @roberkules 的问题在于它的效率较低,并且更难辨别其含义。如果有很长的选项列表,或者作为一个单元更容易阅读的东西,我确实喜欢以这种方式用空格分割字符串,但只有在效率不重要时(这实际上是我在 javascript 中的大部分时间)。
    • 也许这就是你经常在图书馆看到它的原因。那里很可能只解析一次,然后数组一直存在。所以性能应该不是问题。如果我使用这样的数组定义,我只会解析一次。
    【解决方案2】:

    试试这个代码:

    function print_array(arr)
    {
       alert(arr);
    }
    
    var my_array = new Array();
    my_array[0] = "a";
    my_array[1] = "b";
    my_array[2] = "c";
    
    print_array(my_array);
    

    您应该先定义一个函数,然后才能调用它,这是一种良好的编程习惯。

    还要注意被分配的元素的顺序,你把所有的东西都放在 0 上,它们应该放在 1、2 上等等。

    【讨论】:

    • 在 JS 中你没有。函数被提升。
    • 好点大卫,吊装。忘记了。更新以使其成为一种良好的商业实践。
    • 你只需要在调用它之前定义函数,当它被分配给一个像这样的变量时:var myFunc = function(){ alert(123) }
    【解决方案3】:

    扩展Billy Moon's answer

    你可以这样定义你的数组:

    my_array = ["a", "b", "c"];
    

    像这样:

    my_array = [];
    my_array[0] = "a";
    // ...
    

    【讨论】:

      【解决方案4】:

      您使用的是相同的索引0

      var my_array = new Array();
      my_array[0] = "a";
      my_array[1] = "b";
      my_array[2] = "c";
      

      JS Fiddle

      【讨论】:

        【解决方案5】:
        var my_array = ["a", "b", "c"];
        // or a popular way to define (mainly string) arrays:
        var my_array = "abc".split("");
        
        print_array(my_array);
        
        function print_array(arr) {
           alert(arr);
        }
        

        【讨论】:

        • 为什么这是一种定义此类数组的流行方式以及它的作用。 a = "123".split("");console.log(a[0]+a[2]) 怎么会给出 13?
        • 好的,所以这是定义字符串数组的一种流行方式(我在许多 js 库中都看到过)。
        【解决方案6】:

        注意这一点

        function FollowMouse()
        {
            var len = arguments.length;
            if(len == 0) return;
            //
            for(var i=0; i< len; i++)
            {
                arguments[i].style.top = event.clientY+"px";
                arguments[i].style.left = event.clientX+"px";
            }
        
        };
        

        //---------------------------

        html页面

        <body onmousemove="FollowMouse(d1,d2,d3)">
        
        <p><div id="d1" style="position: absolute;">Follow1</div></p>
        <div id="d2" style="position: absolute;"><p>Follow2</p></div>
        <div id="d3" style="position: absolute;"><p>Follow3</p></div>
        
        
        </body>
        

        可以使用任意参数调用函数

        <body onmousemove="FollowMouse(d1,d2)">
        

        <body onmousemove="FollowMouse(d1)">
        

        【讨论】:

          【解决方案7】:
          var f=d=>
            d.forEach(k=>
              alert(k)
            );
          let a=[1,2];
          f(a);
          

          fiddle

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-11
            • 2011-06-20
            • 2017-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多