2017-01-26 7 views
2

のためのいずれかので、私は、この配列を持っている:グループJSONオブジェクトlodashを使用するか、ループ

[ 
    { 
    corequisite: "", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "GMRC 101||Math 101" 
    semester: "1st Term", 
    year: "1st Year", 
    subjectCode : "ENG 101", 
    units : "9" 
    }, 
    { 
    corequisite: "SOFTENG1||SOFTENG2", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "COMP 1" 
    semester: "1st Term", 
    year: "1st Year", 
    subjectCode : "THESIS101", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "Sample1||Sample2" 
    semester: "2nd Term", 
    year: "1st Year", 
    subjectCode : "SampleSubj101", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "SSSS4||S6" 
    semester: "1st Term", 
    year: "2nd Year", 
    subjectCode : "S1", 
    units : "9" 
    }, 
    { 
    corequisite: "SSS2||SSS4", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "COMP 1" 
    semester: "2nd Term", 
    year: "2nd Year", 
    subjectCode : "S2", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2017-2018", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "SS1||SS2" 
    semester: "1st Term", 
    year: "2nd Year", 
    subjectCode : "S3", 
    units : "9" 
    } 
], 
[ 
    { 
    corequisite: "", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "GMRC 101||Math 101" 
    semester: "1st Term", 
    year: "1st Year", 
    subjectCode : "ENG 101", 
    units : "9" 
    }, 
    { 
    corequisite: "SOFTENG1||SOFTENG2", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "COMP 1" 
    semester: "1st Term", 
    year: "1st Year", 
    subjectCode : "THESIS101", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "Sample1||Sample2" 
    semester: "2nd Term", 
    year: "1st Year", 
    subjectCode : "SampleSubj101", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "SSSS4||S6" 
    semester: "1st Term", 
    year: "2nd Year", 
    subjectCode : "S1", 
    units : "9" 
    }, 
    { 
    corequisite: "SSS2||SSS4", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "COMP 1" 
    semester: "2nd Term", 
    year: "2nd Year", 
    subjectCode : "S2", 
    units : "9" 
    }, 
    { 
    corequisite: "", 
    curriculumYr: "2018-2019", 
    programCode: "ET" 
    majorCode: "AET", 
    prerequisites: "SS1||SS2" 
    semester: "1st Term", 
    year: "2nd Year", 
    subjectCode : "S3", 
    units : "9" 
    } 
] 

私はそれがSemesterYear

によって再び programCode,curriculumYearmajorCodeによってグループにこれを望んでいたし、その後、グループ化された出力グループに

私もここで区切り||

に被験者を分割し​​てprerequisitecorequisiteの配列を作りたかったですIは、角度フィルタとlodashを使用してみましたが、私は異なる結果を得る

[ 
     curriculumYr: '2017-2018', 
     programCode: 'ET', 
     majorCode: 'ATO' 
     ,{ Sem: [ 
       subjects : [{ 
          Corequisites: ['Subj1','Subj2'], 
          Prequisites: [], 
          subjectCode: "Sample1" 
          }, 
          { 
          Corequisites: ['Subj1','Subj2'], 
          Prequisites: [], 
          subjectCode: "Sample1"      
          }], 
       term: "1st Term" 
      }], 
      [{ 
       subjects: [2nd term subjects here], 
       term: "2nd Term" 
      }] 
     Year: "1st Year" 
    }], 
    [ 
     curriculumYr: '2018-2019', 
     programCode: 'ET', 
     majorCode: 'ATO' 
     ,{ Sem: [ 
       subjects : [{ 
          Corequisites: ['Subj1','Subj2'], 
          Prequisites: [], 
          subjectCode: "Sample1" 
          }, 
          { 
          Corequisites: ['Subj1','Subj2'], 
          Prequisites: [], 
          subjectCode: "Sample1"      
          }], 
       term: "1st Term" 
      }], 
      [{ 
       subjects: [2nd term subjects here], 
       term: "2nd Term" 
      }] 
     Year: "1st Year" 
    }] 
2nd Year's 1st and 2nd Terms format

用と同じ

例:出力/所望の出力です。別の方法:D

ありがとうございました!

+0

あなたがしようとしているものを追加してください。 –

+0

申し訳ありませんが、ちょっと削除しました。ちょうど私のビューで角度フィルタを使い、ng-initを使ってモデルを作成しました。 –

答えて

3

プレーンなjavascriptを使用すると、データを新しいネストされた配列に変換、名前変更、グループ化する機能を使用できます。

この関数は、ネストされたレベルごとにハッシュテーブルを使用し、指定されたキーをグループ化プロパティとして反復し、すべてのステージに結果セットの新しい配列を追加します。

function getGrouped(array, keys, callback, children) { 
 
    var result = [], 
 
     hash = { _: result }; 
 

 
    callback = callback || function (o) { return o; }; 
 
    children = children || []; 
 
    array.forEach(function (a) { 
 
     keys.reduce(function (r, k, i) { 
 
      var temp = {}, 
 
       key = a[k], 
 
       target = k; 
 

 
      if (Array.isArray(k)) { 
 
       key = k.map(function (b) { return a[b]; }).join('|'); 
 
      } else if (typeof k === 'object') { 
 
       key = a[Object.keys(k)[0]]; 
 
       target = k[Object.keys(k)[0]]; 
 
      } 
 

 
      if (!r[key]) { 
 
       r[key] = { _: [] }; 
 
       if (Array.isArray(k)) { 
 
        k.forEach(function (b) { temp[b] = a[b]; }); 
 
       } else { 
 
        temp[target] = key; 
 
       } 
 
       temp[children[i] || 'children'] = r[key]._; 
 
       r._.push(temp); 
 
      } 
 
      return r[key]; 
 
     }, hash)._.push(callback(a)); 
 
    }); 
 
    return result; 
 
} 
 

 
var data = [{ corequisite: "", curriculumYr: "2017-2018", programCode: "ET", majorCode: "AET", prerequisites: "GMRC 101||Math 101", semester: "1st Term", year: "1st Year", subjectCode: "ENG 101", units: "9" }, { corequisite: "SOFTENG1||SOFTENG2", curriculumYr: "2017-2018", programCode: "ET", majorCode: "AET", prerequisites: "COMP 1", semester: "1st Term", year: "1st Year", subjectCode: "THESIS101", units: "9" }, { corequisite: "", curriculumYr: "2017-2019", programCode: "ET", majorCode: "AET", prerequisites: "Sample1||Sample2", semester: "2nd Term", year: "1st Year", subjectCode: "SampleSubj101", units: "9" }, { corequisite: "", curriculumYr: "2017-2019", programCode: "ET", majorCode: "AET", prerequisites: "SSSS4||S6", semester: "1st Term", year: "2nd Year", subjectCode: "S1", units: "9" }, { corequisite: "SSS2||SSS4", curriculumYr: "2017-2018", programCode: "ET", majorCode: "AET", prerequisites: "COMP 1", semester: "2nd Term", year: "2nd Year", subjectCode: "S2", units: "9" }, { corequisite: "", curriculumYr: "2017-2018", programCode: "ET", majorCode: "AET", prerequisites: "SS1||SS2", semester: "1st Term", year: "2nd Year", subjectCode: "S3", units: "9" }], 
 
    callback = function (o) { return { Corequisites: o.corequisite ? o.corequisite.split('||') : [], Prequisites: o.prerequisites ? o.prerequisites.split('||') : [], subjectCode: o.subjectCode }; }, 
 
    result1 = getGrouped(data, [{ year: 'Year' }, { semester: 'term' }], callback, ['Sem', 'subjects']), 
 
    result2 = getGrouped(data, [['curriculumYr', 'programCode', 'majorCode'], { semester: 'term' }], callback, ['Sem', 'subjects']); 
 

 
console.log(result1); 
 
console.log(result2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

あなたの天使!どうもありがとうございます! –

+0

私は別の質問をすることができますか? pls? @Nina Scholz –

+0

@EdwinBermejo、はい。 –

関連する問題