我有一個返回這樣的值的列表中的AJAX請求:將陣列數組的字符串轉換爲數組的Javascript數組的優雅方式?
"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
我需要它是一個JavaScript陣列號:
[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]
我試圖替換「[」和']'爲'|'然後按'|'分割和foreach項分割','並將它們添加到一個數組,但這是而不是優雅。
你們有什麼建議嗎?
我有一個返回這樣的值的列表中的AJAX請求:將陣列數組的字符串轉換爲數組的Javascript數組的優雅方式?
"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
我需要它是一個JavaScript陣列號:
[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]
我試圖替換「[」和']'爲'|'然後按'|'分割和foreach項分割','並將它們添加到一個數組,但這是而不是優雅。
你們有什麼建議嗎?
您可以使用JSON.parse()
該字符串轉換成一個數組,只要你把它包裝在一些括號手動第一:
var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var json = JSON.parse("[" + value + "]");
console.log(json);
我建議糾正在服務器如果可能的輸出,雖然。
感謝您的快速和優雅的迴應! – cesarferreira
這很漂亮,:) –
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var arr = [];
var tmp = string.split('], ');
for (var i=0; i<tmp.length; i++) {
arr.push(tmp[i].replace(/\[|\]/g, '').split(', '));
}
打字,所以我提前道歉任何錯別字。
這種解決方案在實踐中是愚蠢的 - 完全使用JSON.parse
如其他人所說的 - 但在其與正則表達式樂趣的利益,在這裏你去:
function getMatches(regexp, string) {
var match, matches = [];
while ((match = regexp.exec(string)) !== null)
matches.push(match[0]);
return matches;
}
function parseIntArrays(string) {
return getMatches(/\[[^\]]+\]/g, string)
.map(function (string) {
return getMatches(/\-?\d+/g, string)
.map(function (string) {
return parseInt(string);
});
});
}
parseIntArrays("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]");
定義優雅?大多數字符串操作都不是很漂亮。 –
使用split + for循環可能會匹配會做可能不優雅或漂亮。 ;-) – RobG