有没有办法将二维数组应用于对象?
像这样:
var myArray = [[0,1],[2,3]];
someObject.apply(null,myArray);
它似乎只应用第一个内部数组: - /
为什么?
答案 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 docs,apply
获取一组参数并将它们传递给您的函数。因此,您需要将myArray
置于要解压缩的数组中以形成someObject
的参数:
var myArray = [[0, 1],[2, 3]];
someObject.apply(null, [myArray]);
在您发布的代码中,函数someObject
收到两个参数:[0, 1]
和[2, 3]
。这是合法的,因为JavaScript允许使用许多参数调用函数,这些参数与形式参数的数量不同。但是因为更多参数而不是形式参数,第二个参数([2, 3]
)丢失了,你只看到了第一个([0, 1]
)。