6

久しぶりに JavaScript のコードに取り組まなければならなかったので、すっかりさびれてしまいました。

次のように配列を分割する必要があります。

物体 (
    [0] => 2013 年 4 月 12 日
    [1] => テキスト
    [2] => テキスト
    [3] => テキスト
    [4] => テキスト
    [5] => 2013 年 4 月 11 日
    [6] => テキスト
    [7] => テキスト
    [8] => テキスト
    [9] => テキスト
    [10] => テキスト
    [11] => テキスト
    [12] => 2013-04-10
    [13] => テキスト
    [14] => テキスト
    [15] => テキスト
    [16] => テキスト
    [17] => 2013-04-09
    [18] => テキスト
    [19] => テキスト
    [20] => テキスト
)

インデックス 0 が常に日付である json オブジェクトまたは配列に変換します。

オブジェクト0 (
    [0] => 2013 年 4 月 12 日
    [1] => テキスト
    [2] => テキスト
    [3] => テキスト
    [4] => テキスト
)
オブジェクト1 (
    [0] => 2013 年 4 月 11 日
    [1] => テキスト
    [2] => テキスト
    [3] => テキスト
    [4] => テキスト
    [5] => テキスト
    [6] => テキスト
)

オブジェクト 2 (
    [0] => 2013 年 4 月 10 日
    [1] => テキスト
    [2] => テキスト
    [3] => テキスト
    [4] => テキスト
)

オブジェクト3 (
    [0] => 2013 年 4 月 9 日
    [1] => テキスト
    [2] => テキスト
    [3] => テキスト
)

ご覧のとおり、値を使用して、サイズが異なる可能性がある新しい配列をそれぞれ把握することしかできません。

助けてくれてありがとう。

更新 申し訳ありませんが、最初の質問で自分のコードを公開しませんでした。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("},]","}]"); 
4

3 に答える 3

7

Assuming that the date's is the only ones with just numbers in it you can try this:

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]);
    }
}
于 2013-04-15T15:23:07.177 に答える
3

基本的、

result = []

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

さらに必要な場合は、実際のコードを投稿してください;)

于 2013-04-15T15:05:53.123 に答える