2016-02-26 51 views
-2

的陣列串有一個字符串在JSJava腳本通過串

var arr=["ABC(A),CDE(C),BFE(B)",+ 
"XYZ(X)","ZVF(Z)","RET(R)",+ 
"MXE(M)"]; 

現在需要通過這個迭代,並得到括號上次的代碼與匹配值,並做一些操作的陣列。

我試圖子串,但得到一個錯誤控制檯類似ARR [I] .substr不是一個函數,只要它是達到了,+陣列中的一部分。

代碼以通過陣列迭代。

for(var i=0,len=arr.length;i<len;i++) 
{ 
    if(arr[i].substr(length-1,length-2)!=L) 
    { 
     console.log("my code is "+arr[i].substr(length-1,length-2); 
    } 
} 

在讀入,直到「B」失敗後說,改編[I] .substr是不是一個功能,可能是因爲「+」有人可以幫忙嗎?嘗試搜索谷歌,但無法通過類似的情況。

+1

是不是這裏的一個錯字:substr(length-1,length-2!= L)。應該是substr(length-1,length-2)!= L我認爲 –

+6

你的數組定義是無效的,字符串之前的'+'將被解釋爲一元運算符,這將導致各種奇怪的行爲。 –

+0

@RoryMcCrossan ::是的,有沒有解決這個問題?我的意思是如果我保持+的地方,仍然使用它作爲一個正常的數組。 – NeverGiveUp161

回答

-1

+"XYZ"部分被解釋爲NaN,這是一個kindof shortend爲parseInt函數()子串方法不知道在NaN;)

如果不需要該+你可以刪除它。 (JavaScript可以將多條線路上,無需注意寫入;)

編輯: 那是你的最後一個數組,由瀏覽器解釋:

["ABC(A),CDE(C),BFE(B)", NaN, "ZVF(Z)", "RET(R)", NaN] 
+1

謝謝!得到它,期待堆棧溢出的一些魔術技巧來解決這個問題,最後創建了一個沒有+代碼的新數組。 – NeverGiveUp161

+0

JS可能會有些棘手:-p –

0

這裏有一些問題。

首先,澄清,您的陣列中的第一個元素是一個字符串,即開始在您的陣列中的操作者+你獲得的問題之後。該運算符正試圖在數組中添加該字符串,但無法將該字符串轉換爲數字,因此它返回NaN

你的陣列:

var arr=["ABC(A),CDE(C),BFE(B)",+ 
"XYZ(X)","ZVF(Z)","RET(R)",+ 
"MXE(M)"]; 

實際上被處理爲:

[ 「ABC(A),CDE(C),BFE(B)」,NaN時,「ZVF(Z) 」,‘RET(R)’,爲NaN]

注意,陣列中的第一個元素是"ABC(A),CDE(C),BFE(B)"單個串中,即使它包含逗號,其仍然是單個陣列元件記住。其次,在你的if語句if(arr[i].substr(length-1,length-2)!=L)中,變量L沒有在任何地方定義。這會拋出錯誤。

最後,在您的字符串操作語句console.log("my code is "+arr[i].substr(length-1,length-2);中,您希望使用substring()而不是substr(),因爲您正在移動到特定位置而不是多個字符。此外,length未定義。您需要改爲使用arr[i].length代替數組元素的長度。

 

總的來說這些改變你的代碼看起來像:

var arr=["ABC(A)","CDE(C)","BFE(B)","XYZ(X)","ZVF(Z)","RET(R)","MXE(M)"]; 

for(var i=0; i < arr.length;i++) { 
    console.log("my code is "+arr[i].substring(arr[i].length-1,arr[i].length-2)); 
} 

這將輸出:

我的代碼是一個
我的代碼是C
我的代碼是B
我的代碼是X
我的代碼爲Z
我的代碼爲R
我的代碼是M

你可以看到它在這方面的工作JS小提琴:https://jsfiddle.net/3dgdc4sr/1/

希望幫助!

+0

謝謝,不完全是答案,但它有助於理解我的錯誤 – NeverGiveUp161