为什么 splice 返回字符串而不是数组?

Gar*_*ary 0 javascript multidimensional-array array-splice

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

var one = ["a","b"];  
var two = ["c","d"];  
var thr = ["e","f"];  
var arr = [one,two,thr];
Run Code Online (Sandbox Code Playgroud)

以下是我的两次不成功的尝试:

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_).
Run Code Online (Sandbox Code Playgroud)

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".
Run Code Online (Sandbox Code Playgroud)

我有一个不太理想的解决方法,但我希望通过一个函数来完成此任务。

var test = arr[1].slice(0);  
arr.splice(1,1);
Run Code Online (Sandbox Code Playgroud)

Koo*_*Inc 5

有趣的观察。来自 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'
Run Code Online (Sandbox Code Playgroud)