2013-04-15 166 views
2

我已經很長一段時間了,因爲我必須處理一些JavaScript代碼,而且我很生鏽。根據值拆分數組

我需要拆分一個這樣的數組:

 
Object (
    [0] => 2013-04-12 
    [1] => text 
    [2] => text 
    [3] => text 
    [4] => text 
    [5] => 2013-04-11 
    [6] => text 
    [7] => text 
    [8] => text 
    [9] => text 
    [10] => text 
    [11] => text 
    [12] => 2013-04-10 
    [13] => text 
    [14] => text 
    [15] => text 
    [16] => text 
    [17] => 2013-04-09 
    [18] => text 
    [19] => text 
    [20] => text 
) 

成JSON對象或數組,其中索引0始終日期:

 
Object0 (
    [0] => 2013-04-12 
    [1] => text 
    [2] => text 
    [3] => text 
    [4] => text 
) 
Object1 (
    [0] => 2013-04-11 
    [1] => text 
    [2] => text 
    [3] => text 
    [4] => text 
    [5] => text 
    [6] => text 
) 

Object2 (
    [0] => 2013-04-10 
    [1] => text 
    [2] => text 
    [3] => text 
    [4] => text 
) 

Object3 (
    [0] => 2013-04-09 
    [1] => text 
    [2] => text 
    [3] => text 
) 

因此,大家可以看到,我只能用計算出每個新陣列的值,其大小可以不同。

感謝您的任何幫助。

UPDATE 對不起,我沒有發表我的代碼在最初的問題,因爲我所寫的是太垃圾(和我很慚愧)。 在這裏我最終使用的代碼感謝來自Bangerang的解決方案。 感謝大家的幫助和貢獻。

var events = []; 
var result = []; 
var j = 0; 
for (var i = 0; i < tableData.length; i++){ 
    if (/^(\d{4})-(\d{2})-(\d{2})$/.test(tableData[i])){ //Returning true if it's just numbers 
     j = j + 1; 
     events[j] = []; 
     events[j].push(tableData[i]); 
     result.push(events[j]); 
    } else { 
     events[j].push(tableData[i]); 
    } 
} 

// Then I write the json message which will be eval to use with FullCalendar. 
var json_events = '['; 
for (var i = 1; i <= events.length; i++){ 
    if (typeof events[i] !== 'undefined' && events[i].length > 0) { 
     for (var j = 0; j < events[i].length; j++){ 
      if(/@/.test(events[i][j])){ 

       json_events += '{"start":"' + events[i][0] + '",'; 
       json_events += '"textColor":"black",'; 

       var tmp = events[i][j].split("@"); 
       json_events += '"backgroundColor":"' + tmp[0] + '",'; 

       var text_pattern = new RegExp(/<b>([a-z_]+)<\/b>(.+)/); 
       var title_desc = text_pattern.exec(tmp[1]);        
       json_events += '"title":"' + title_desc[1] + '",'; 
       json_events += '"description":"' + title_desc[0] + '"'; 
       json_events += '},'; 
      } 
     } 
    } 
} 
json_events += ']'; 
json_events = json_events.replace("},]","}]"); 
+0

'/ ^(\ d {4}) - (\ d {2}) - (\ d {2})$ /'與您的示例中的日期格式不匹配。日期是以字符串還是數字形式存儲的? – kay

+0

對不起,你是對的,我在此期間改變了日期格式(發現RegExp和exec())。我會更新這個問題以反映我的變化。 – Jonas

+0

請不要在標題中加入「解決」。 Stackoverflow用接受的答案對問題進行顏色編碼。 – kay

回答

4

假設日期的是唯一的與它只是數字,你可以試試這個:

var object = []; 
var result = []; 
for (var i = 0; i < objects.length; i++){ 
    if (/^\d+$/.test(objects[i])){ //Returning true if it's just numbers 
     object = [] 
     object.push(objects[i]); 
     result.push(object); 
    }else { 
     object.push(objects[i]); 
    } 
} 
2

基本上,

result = [] 

sourceArray.forEach(function(element) { 
    if(element looks like a date) 
     result.push([]) 
    result[result.length - 1].push(element) 
}) 

發佈您的實際代碼,如果你想要更多;)

0

目前,這項工作是不是真的很複雜。你只需要通過你的數組,當你遇到一個日期格式的單元格時創建一個新的數組。在此之前,您將使用非日期遇到的值填充先前創建的數組。我想,所有的數組內容都是字符串,所以我們將在這裏使用一個簡單的正則表達式^[0-9]{8}$

var result = new Array(); 
var date_format = /^[0-9]{8}$/; 

for (var k in big_array) { 
    // if date format, add a new array 
    if (date_format.test(result[k])) { 
     result.push(new Array()); 
    } 
    // finally, push the value in the last array 
    result[result.length-1].push(big_array[k]); 
} 

這是一個非常簡單的算法鍛鍊確定日期格式,因此,我建議要多練習代碼的編寫和避免下次問,或至少顯示你的嘗試。

此致敬禮。