2

在这个 JavaScript 中,为什么我没有得到azbc

var x = "a-b-c".split('-').splice(1, 0, 'z');
alert(x.join(''));

splita返回一个包含,b和的数组c

不应该在之后splice插入并给我吗?zaazbc

为什么我得到一个空数组?

注意:我知道我想要的可以通过以下方式完成:

var x = "a-b-c".split('-')
x.splice(1, 0, 'z');
alert(x.join(''));

因为splice“修改”了原始数组本身。它不应该修改{a,b,c}{a,z,b,c}然后分配给x吗?

明白了...下面的代码帮助我理解。

var x = "a-b-c".split('-')
x = x.splice(1, 0, 'z');
alert(x.join(''));
4

4 回答 4

6

splice返回从数组中删除的项目,而不是新数组:

> x = 'a-b-c'.split('-');
["a", "b", "c"]
> x.splice(1,0,'z');
[]
> x
["a", "z", "b", "c"]
> x.splice(1,1,'x');
["z"]
> x
["a", "x", "b", "c"]
于 2012-06-01T05:52:56.070 回答
1

就像 Paolo 所说,splice 修改了数组http://jsfiddle.net/k9tMW/

var array = "a-b-c".split('-');
array.splice(1, 0, 'z');
alert(array.join(''));
于 2012-06-01T05:54:38.660 回答
1

Mozilla Developer Network-Array splice method - 更改数组的内容,在删除旧元素的同时添加新元素。

返回- 包含已删除元素的数组。如果仅删除一个元素,则返回一个包含一个元素的数组。

var x = "a-b-c".split('-');
x.splice(1, 0, 'z');
document.write(x + "<br />"); 
于 2012-06-01T05:54:41.047 回答
1

你必须这样做,

var x = "a-b-c".split('-');
x.splice(1, 0, 'z');
alert(x.join(''));​
于 2012-06-01T05:58:16.797 回答