0

ここで私のコードに少し論理的な問題があり、誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.

制約:

  1. プッシュされた各アイテムはイベントになり、「名前」でグループ化され、チャートにインラインで表示されます。
  2. EPC、M1、または M2 の値は null の場合があります。
  3. イベントは、最初の非 null タイムラインの「開始」と次の非 null タイムライン値の「終了」で作成する必要があります。(どれも null 値を含まないため、m2 を超えてチェックする必要はありません)。すべてのグループに少なくとも 4 つのマイルストーンが必要です。
  4. 「グループ」がなくなるまで続行する必要があります (content[i].name)。

現在、私のコードにはいくつかの問題があります。

  1. グループごとに 1 つのイベントのみを作成します。
  2. EPC は反復で考慮されず、start で null 以外の場合は処理されません。

コードは次のとおりです。

getMileStone = function(obj) {
    if(!obj) { return };
        propCounter = 1;
        newcount = 0;
        for(propCounter = 1; propCounter <= 7; propCounter++) {
            if(obj.timeline["m" + propCounter]) {
                data[newcount] = {key: "m" + propCounter, value: obj.timeline["m" + propCounter]};
                return data[newcount];
                newcount++;
            }
         }

        };

        getSecondStone = function(obj) {

            switch(getMileStone(current).key){

                case 'm1': return {value: obj.timeline['m2']};
                break;
                case 'm2': return {value: obj.timeline['m3']};
                break;
                case 'm3': return {value: obj.timeline['m4']};
                break;
                case 'm4': return {value: obj.timeline['m5']};
                break;
                case 'm5': return {value: obj.timeline['m6']};
                break;
                case 'm6': return {value: obj.timeline['m7']};
                break;
                default: return {value: obj.timeline['m1']};
            }

        };

for(i=0;i< content.length;i++) {
 current = content[i];
 firstMileStone = getMileStone(current); 
 secondMileStone = getSecondStone(current);
  result.push({
  'start': new Date(current.epc || firstMileStone.value),
  'end': new Date(current.m1 || secondMileStone.value),
  'content': firstMileStone.key,
  'group' : current.name,
  'className' : firstMileStone.key
 });
}

そして、読み取られる配列の内容は次のとおりです。

content = [{
"name": "5-HP-N/A-N/A-F8",
"node": {
    "name": "5",
    "id": 14
},
"timeline": {
    "epc": null,
    "m1": null,
    "m2": null,
    "m3": 1554087600000,
    "m4": 1593572400000,
    "m5": 1625108400000,
    "m6": 1641006000000,
    "m7": 1656644400000
},
"fab": {
    "name": "F8",
    "id": 1
  }
},
{
  "name": "7-HP-N/A-N/A-F8",
  "node": {
    "name": "7",
    "id": 15
},
"timeline": {
    "epc": null,
    "m1": null,
    "m2": null,
    "m3": 1491015600000,
    "m4": 1530414000000,
    "m5": 1561950000000,
    "m6": 1577847600000,
    "m7": 1593572400000
},
"fab": {
    "name": "F8",
    "id": 1
  }
},
{
"name": "5-XM-N/A-PLT-F8",
"node": {
    "name": "5",
    "id": 14
},
"timeline": {
    "epc": null,
    "m1": null,
    "m2": null,
    "m3": 1554087600000,
    "m4": 1593572400000,
    "m5": 1625108400000,
    "m6": 1641006000000,
    "m7": 1656644400000
},
"fab": {
    "name": "F8",
    "id": 1
  }
},
{
"name": "40-LP-TFS-FSL-F7",
"node": {
    "name": "40",
    "id": 4
},
"timeline": {
    "epc": 1349060400000,
    "m1": null,
    "m2": null,
    "m3": 1262314800000,
    "m4": 1301626800000,
    "m5": 1333249200000,
    "m6": 1341111600000,
    "m7": 1357009200000
},
"fab": {
    "name": "F7",
    "id": 3
  }
},
{
"name": "40-LP-SST-TI-F7",
"node": {
    "name": "40",
    "id": 4
},
"timeline": {
    "epc": 1349060400000,
    "m1": null,
    "m2": null,
    "m3": 1262314800000,
    "m4": 1301626800000,
    "m5": 1333249200000,
    "m6": 1341111600000,
    "m7": 1357009200000
},
"fab": {
    "name": "F7",
    "id": 3
  }
},
{
"name": "28-LPQ-TN3-QCOM-F1",
"node": {
    "name": "28",
    "id": 2
},
"timeline": {
    "epc": 1349060400000,
    "m1": null,
    "m2": null,
    "m3": 1285902000000,
    "m4": 1325386800000,
    "m5": 1357009200000,
    "m6": 1372647600000,
    "m7": 1388545200000
},
"fab": {
    "name": "F1",
    "id": 2
}
}];

現在、作成されたすべてのイベントも m3 で始まります。助けてくれてありがとう!

4

1 に答える 1

0

前回の質問にコメントを残しました。これが私のコメントの実装です。

// get all non-null milestones
getMileStone = function (obj) {
    var result = [];

    for (var o in obj.timeline) {
        if (obj.timeline[o]) {
            result.push({ key: o, value: obj.timeline[o] });
        }
    }
    //dummy value for end pairing
    result.push({key: 'end', value : null});
    return result;
};


// loop over content array (seems like you have an array of objects)
for (var i = 0; i < content.length; i++) {
    current = content[i];
    var milestones = getMileStone(current);

    //loop through the non-null milestones
    for (var j = 0; j < milestones.length - 1; j++) {
        result.push({
            'group': current.name,
            'content': milestones[j].key,
            'start': new Date(milestones[j].value),
            'end': milestones[j + 1].value != null ? new Date(milestones[j + 1].value):null,
            'classname': milestones[j].value
        });
    }

}
于 2012-12-19T00:12:26.127 に答える