2012-06-01 29 views
1

在这个JavaScript中,为什么我没有得到azbc为什么调用split和splice会给出空数组?

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

split返回包含abc阵列。

不应该splice插入za并给我azbc

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

注: 我知道我想要什么可通过以下方式实现:

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('')); 
+0

*它返回被删除的元素*,所以没有,也不会被分配到X。分配给x的唯一东西就是任何元素被删除,在这种情况下没有。底线是如果你想拼接一个数组,你必须先将它存储在一个变量中,否则你将失去一个像你所拥有的链式表达式的结果。 –

+0

JavaScript在这里没有区分它自己。 – superluminary

回答

5

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"] 
1

就像保罗说,拼接就地修改http://jsfiddle.net/k9tMW/

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

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

返回 - 包含删除的元素的数组。如果只有一个元素被删除,则返回一个元素的数组。

var x = "a-b-c".split('-'); 
x.splice(1, 0, 'z'); 
document.write(x + "<br />"); 
1

你要做这样的,

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