2013-09-27 18 views
-2

我的Ajax調用得到"[['Best Value (62)',62 ],['LPTA (32)',32 ],] "作爲返回值。我需要將它作爲一個數組傳遞。有沒有辦法使字符串成爲一個數組而不訴諸於eval()字符串的JavaScript Array

+4

如果你真的有這個尾隨逗號,甚至沒有eval()會救你。 – Brian

+1

爲什麼你有這樣的結果,而不是正確的json編碼數組? –

+1

@Brian:尾數的逗號在數組文字中有效嗎? – Bergi

回答

0

如果去掉後面的逗號和改變雙引號來轉義雙引號和其他任何你已在陣列中形成的好,那麼你可以使用JSON.parse把字符串到一個數組。如果你有權訪問服務器端的代碼,你可能想在那裏進行更改,而不是在你的js中。

JSON.parse("[[\"Best Value (62)\",62],[\"LPTA (32)\",32]]") 
+4

這不是有效的JSON,無論是(單引號) – Brian

+0

沒錯錯過了。 – scotty

+0

刪除尾隨逗號,將單引號改爲雙引號,我們就去!謝謝! –

0

你有什麼不是JSON,但是有效的JavaScript(假設額外的逗號是複製粘貼錯誤)。而且,就像我不喜歡它,你可以使用eval:

// convert the input in to a javascript array 
var o = eval("[['Best Value (62)',62],['LPTA (32)',32]]"); 
// use jQuery map to grab only the first array value and return 
// each selection back as an array 
$.map(o, function(a){ 
    return a[0]; 
}); // ['Best Value (62)','LPTA (32)']; 

如果額外的逗號就會留下來,你可以用多一點處理擺脫它:

var data = "[['Best Value (62)',62],['LPTA (32)',32],]"; 
var o = eval(data.replace(/\],\]$/,']]')); 
$.map(o, function(a){ 
    return a[0]; 
}); 
+0

*「...不訴諸於'eval()'」* – JJJ

+0

沒有「不訴諸eval」。它不是JSON,它不是本地對象。唯一的另一種方式來將它翻譯成你可以使用的東西是eval ... –

+1

額外的逗號不會使它無效JS。 – Bergi

0
JSON.parse("[['Best Value (62)',62 ],['LPTA (32)',32 ],]".replace(/(,])$/, ']').replace(/'/g, '"')) 
+0

爲什麼downvote?這就是用戶想要的! http://jsfiddle.net/BxqSr/ –

+1

不是dv,但是如何處理字符串中間的單引號?現在你最終會得到一個字符串值,比如''不工作「,'除非給定的數據的值被設置,並且不可能有真正的引號 –

+0

,否則我馬上修復它 –