2017-04-10 10 views
0

私は、配列内の次のデータを持っている:入れ子になったJSON配列内の配列を比較するには?

[{ 
    Credits: '4', 
    Name: 'Computer Science 250: Introduction to Website Design', 
    Classes: 
    [ 
     { Day: 'Mon', 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' }, 
     { Day: 'Wed', 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' }, 
     { Day: 'Fri', 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' } ] } 

    { 
    Credits: '3', 
    Name: 'Math 220: Differential Equations', 
    Classes: 
    [ 
     { Day: 'Mon', 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' }, 
    { Day: 'Wed', 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' }, 
    { Day: 'Fri', 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' } ] }] 

問題は、どのように私はこれを行うことができます(データのこの部分のみを注文された残りがありません)私は終了時間によってデータをソートする必要がありますか?

または、内部配列のプロパティに基づいてデータをどのようにして少なくともどのように並べ替えることができますか?

私はjavascriptで作業しています。

EDIT問題は、JSON配列内に設けられた被験者は、例えば被験者が上記したがってそれらは衝突同時に発生、開始および終了時間に基づいて衝突かかどうかを見つけることである

+0

JSONが無効であることを(またはJSONがなくJavaScript変数宣言が不完全です) – Quentin

+0

問題をより小さな部分に分割します。このライブラリは以下のように役立ちます:http://underscorejs.org/ – FailedUnitTest

+0

提供したサンプルデータの期待される出力を提供してください。 – trincot

答えて

0

あなたは内側の配列を得ることができ、コース名(または全てのコース情報とその要素を拡張します)、そして最終的には機能比較カスタムでそれらを並べ替えるために、それらを一緒に連結します。

function byDayTime(schedule) { 
 
    const weekDays = {Mon:1, Tue:2, Wed:3, Thu:4, Fri:5}; 
 
    return schedule.reduce((acc, course) => 
 
     acc.concat(course.Classes.map(cls => 
 
      Object.assign({}, cls, { courseName: course.Name }) 
 
     )) 
 
    , []).sort((a, b) => 
 
     weekDays[a.Day] - weekDays[b.Day] || a.EndTime - b.EndTime 
 
    ); 
 
} 
 

 
// Sample data 
 
const schedule = [{ 
 
    Credits: '4', 
 
    Name: 'Computer Science 250: Introduction to Website Design', 
 
    Classes: [{ 
 
     Day: 'Mon', 
 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' 
 
    }, { Day: 'Wed', 
 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' 
 
    }, { Day: 'Fri', 
 
     EndTime: '{ts \'1970-01-01 18:00:00\'}', 
 
     StartTime: '{ts \'1970-01-01 16:30:00\'}' 
 
    }] 
 
}, { 
 
    Credits: '3', 
 
    Name: 'Math 220: Differential Equations', 
 
    Classes: [{ 
 
     Day: 'Mon', 
 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' 
 
    }, { 
 
     Day: 'Wed', 
 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' 
 
    }, { 
 
     Day: 'Fri', 
 
     EndTime: '{ts \'1970-01-01 18:30:00\'}', 
 
     StartTime: '{ts \'1970-01-01 17:30:00\'}' 
 
    }] 
 
}]; 
 

 
// Get array ordered by day/time: 
 
const result = byDayTime(schedule); 
 

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

+0

ありがとう –

0

(例えばJSON.parseで:p)は、あなたのJSONを解析することで、作業を開始し、あなたのjavascript配列を持っています場合は、あなたのことを解析する場合

、あなたは(非常に簡単にソート機能を使用することができます〜にあなたの日付)。

例えば

、ここで私は(他の人の前体格)TYPEによって、配列をソートし、アルファベット順:

return $.map(caracInfos, function (caracInfo) { 
     return new CaracInfo(caracInfo); 
    }).sort(function (caracInfo1, caracInfo2) { 
     if (caracInfo1.type === caracInfo2.type) return caracInfo1.carac.localeCompare(caracInfo2.carac); 
     if (caracInfo1.type === CaracInfo.TYPES["PHYSIQUE"]) return -1; 
     if (caracInfo2.type === CaracInfo.TYPES["PHYSIQUE"]) return 1; 
     return 0; 
    }); 
関連する問題