2012-06-01 32 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(''));​ 
相關問題