【问题标题】:passing a multidimensional array into a function in javascript将多维数组传递给javascript中的函数
【发布时间】:2013-04-17 17:42:56
【问题描述】:

我有一个这样的数组:

var array = [['h','e','l','l','o'],['1','2','3','4','5'],['a','b','c','d','e']]

我无法将它传递给一个函数,这是我正在使用的原始脚本:

for (var x = 0; x <= 2; x++) {
    var timesrun = 0;

    function runcode() {
        timesrun += 1;
        for (var n = 0; n <= 4; n++) {
            console.log(array[x][n]);
        } //end for loop 1
        if (timesrun == 2) {
            clearInterval(interval);
        }
    } //end of function
} // end for loop 2
var interval = setInterval(function () {
    runcode(array[x]);
}, 1000);

当我在函数内部 console.log 时,我什么也得不到,但如果我在函数外部采用内部 for 循环,然后 console.log 我得到预期值所以我不认为我将值带入功能正确。

为了简单起见,我想用下面的简单例子来问这个问题:

function runcode(?){
    console.log(array[0][1]);  //which should return h.
}
runcode(?);

【问题讨论】:

标签: javascript function for-loop multidimensional-array


【解决方案1】:
var array = [['h','e','l','l','o'],['1','2','3','4','5'],['a','b','c','d','e']],
    x = 0,
    timesrun = 0;

function runcode() {
    timesrun += 1;
    for (var n = 0; n <= 4; n++) {
        console.log(array[x][n]);
    }
    if (timesrun == 2) {
        clearInterval(interval);
    }
}    

var interval = setInterval(function () {
    for (x = 0; x <= 2; x++) {
        runcode(array[x]);
    }
}, 1000);

【讨论】:

  • 他要使用setInterval
  • 谢谢!你节省了很多小时的痛苦,哈哈。我想我绝对可以从这里继续 :)
  • 虽然看起来我必须在函数内部使用 array[x-1][n] 来获取所有这些,否则它会崩溃,因为它会跳过第一个。你可能知道这是为什么吗?
  • setInterval 在那里做什么,它与在第一次调用timesrun === 3 时执行setTimeout 基本相同,因此间隔正在清除。此外,传递给runcode 的数组也从未在其中使用。我认为这就是 OP 的问题是关于
【解决方案2】:

为了简单起见,我想用下面的简单例子来问这个问题:

function runcode(?){
    console.log(array[0][1]);  //which should return h.
}

runcode(?);

要访问传递的变量,您必须在函数头中命名参数

因此,如果您将 ? 替换为 array,您已经可以使用了

function runcode(array){
              // ^^^^^ This is the name under which you can acces the passed variable
    console.log(array[0][1]);  //which should return h.
              //^^^^^ This is where you use it

}
runcode(array);
      //^^^^^ this is where you pass it //could be someOther2DimensionalArray

并应用于非工作代码

var array = [
    ['h', 'e', 'l', 'l', 'o'],
    ['1', '2', '3', '4', '5'],
    ['a', 'b', 'c', 'd', 'e']
],
    x = 0,
    timesrun = ~0;

function runcode(array) {
    x = timesrun += 1;
    for (var n = 0; n <= 4; n++) {
        console.log(array[x][n]);
    }
    if (timesrun == 2) {
        clearInterval(interval);
    }
}

var interval = setInterval(runcode, 1000, array);

这应该可以解决问题。

注意setInterval的第三个参数是用来传递array //runcode(array)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2014-11-19
    • 2014-03-16
    相关资源
    最近更新 更多