javascript:应用二维数组

时间:2012-03-10 17:27:19

标签: javascript arrays apply

有没有办法将二维数组应用于对象?

像这样:

var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);

它似乎只应用第一个内部数组: - /

为什么?

4 个答案:

答案 0 :(得分:1)

您的代码有效..

使用该代码将两个参数传递给someObject函数,[0,1]和[2,3]

根据这个小提琴,正是发生了什么。 http://jsfiddle.net/BgVxQ/

编辑:如果您有一个未知数量的参数,请使用函数中可用的参数变量来获取它们。如果你有一个固定数量的参数,那么声明它们通常会更容易

function someObject(parameter1, parameter2){
    //Do stuff
}

这样您就不需要从参数

中手动提取它们

答案 1 :(得分:1)

好的,既然你的问题是如此缺乏信息,我会假设很多东西。首先,我将假设someObject是一个函数。接下来我将假设它只有一个像@Adam指出的正式参数。所以这就是我假设您的代码看起来像:

function someObject(a) {
    alert(a);                   // were you expecting [[0,1],[2,3]]?
}

var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);

这就是我认为你想要的:

function someObject() {
    alert(arguments);           // now it alerts [[0,1],[2,3]]
}

var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);

请记住,当您apply函数的参数时,您将参数作为数组传递给它。这有点像调用函数如下:

function someObject() {
    alert(arguments);
}

var myArray = [[0,1],[2,3]];
someObject(myArray[0], myArray[1]);

当然,它还为该函数指定了一个自定义指针。

修改:回顾您的代码我认为您可能打算使用call代替apply。方法call允许您将参数作为单独的参数而不是参数数组传递给函数。所以你的代码看起来会是:

function someObject(a, b) {
    alert(a);                  // now a is [[0,1],[2,3]]
    alert(b);                  // b is 5 and so on
}

var myArray = [[0,1],[2,3]];
someObject.call(null,myArray,5);

答案 2 :(得分:-2)

var myArray = [[0,1],[2,3]];
someObject.apply(null,[myArray]);

答案 3 :(得分:-2)

根据the docsapply获取一组参数并将它们传递给您的函数。因此,您需要将myArray置于要解压缩的数组中以形成someObject的参数:

var myArray = [[0, 1],[2, 3]];
someObject.apply(null, [myArray]);

在您发布的代码中,函数someObject收到两个参数:[0, 1][2, 3]。这是合法的,因为JavaScript允许使用许多参数调用函数,这些参数与形式参数的数量不同。但是因为更多参数而不是形式参数,第二个参数([2, 3])丢失了,你只看到了第一个([0, 1])。