0

我正在尝试从二维数组arr拼接数组

var one = ["a","b"];  
var two = ["c","d"];  
var thr = ["e","f"];  
var arr = [one,two,thr];

这是我的两次不成功的尝试:

1)

var rem = arr.splice(1,1);  
alert(rem[0]);  
// This alerts the entire array as one long string "c,d".
// The expected behavior is "c" (index 0 of the returned array _rem_).

2)

var rem = arr[1].splice(0);  
alert(arr);  
// The array _rem_ is now correct, but _arr_ is left with an empty index: "a,b,,e,f".

我有一个不太理想的解决方法,但我希望通过一个功能来实现这一点。

var test = arr[1].slice(0);  
arr.splice(1,1);
4

3 回答 3

4

有趣的观察。来自 ECMA 规范(262,第 5 版):

当使用两个或多个参数 start、deleteCount 和(可选)item1、item2 等调用 splice 方法时,从数组索引 start 开始的数组的 deleteCount 元素将替换为参数 item1、item2 等。 Array 对象返回包含已删除元素(如果有)的

Array.splice因此返回已删除元素的数组。所以,如果你想引用删除的数组,这应该是语法:

var rem = arr.splice(1,1)[0];
alert(rem[0]); //=> 'c'
于 2011-05-01T08:12:17.400 回答
2

您似乎很困惑,可能是因为您将数组传递给alert(). 据我所知,你想要什么,你的第一个例子是正确的。在进行任何拼接之前,arr变量中的内容是

[
   ["a", "b"],
   ["c", "d"],
   ["e", "f"]
]

调用后var rem = arr.splice(1, 1),从索引 1 处删除一个元素arr并将其存储在变量中的数组中rem,您所拥有的是

arr

[
   ["a", "b"],
   ["e", "f"]
]

rem

[
   ["c", "d"]
]

rem[0]array也是如此["c", "d"],这就是我认为你想要的。

于 2011-05-01T11:22:00.273 回答
0

我认为它按预期工作的拼接方法总​​是返回一个数组。

当你说 arr[1].splice(0); 它在一个上调用并给出 ['a']

当你做 arr.splice(1,1); 它会返回[一个]

于 2011-05-01T04:11:32.180 回答