0

これに似た多くのアイテムを含む配列がある場合:

[
    ["Core", "Mathematics", "Mathematics 20-4"],
    ["Core", "Mathematics", "Mathematics 30-1"],
    ["Other", "Fine Arts", "Art", "some art course"],
    ["Other", "Fine Arts", "Music", "some music course"],
    ["Other", "Forensics", "some forensics course"],
    ["French Immersion", "Core", "Mathématiques", "Mathématiques 30-1"]
]

構造が本質的に「部門->主題->コース」である場合。

次のような配列(またはオブジェクト)を動的に作成したい(または最も意味のあるもの)...

{
    subjects: [
        {
            title: "Mathematics", courses: [ "Mathematics 20-4", "Mathematics 30-1" ]
        },
        {
            title: "Mathématiques", lang: "fr", courses: [ "Mathématiques 30-1" ]
        }
    ],
    other: {
        subjects: [
            {
                title: "Forensics", courses: [ "some forensics course" ]
            },
            {
                title: "Fine Arts", subjects: [
                    {
                        title: "Art", courses: [ "some art course" ]
                    },
                    {
                        title: "Music", courses: [ "some music course" ]
                    }
                ]
            }
        ]
    }
}

「その他」部門は、必ずしも「科目->コース」に続く必要はなく、「科目->科目->コース」および「科目->コース」を持つことができます。type="course"とtype="subject"を追加すると役立つかもしれませんが、それでも階層を持たせたいと思います。

私はこれを配列またはオブジェクト構造に動的に変換する方法に頭を悩ませてきました。

4

2 に答える 2

1
var courses = {};
for(var i =0; i<arr.length; i++){
   var department = arr[i][0];
   var subject = arr[i][1];
   var course = arr[i][2];
   courses[department]= courses[department] || {};
   courses[department][subject] =  courses[department][subject] || [];
   courses[department][subject].push(course);
}

これにより、フォームにオブジェクトが生成されます

courses = {
   core:{
     mathematics:["math1","math2"],
     english: ["english1,"english2"]
   }
  Other:{
    "Fine Arts":[...],
    "Forensics":[...]
  }

}

私はあなたが望むものだと思います。

たとえば、特定の科目の一連のコースが必要な場合は、次のコマンドでアクセスできます。

var courselist = courses[<department>][<subject];
于 2013-03-11T23:41:56.130 に答える
0

@ ben336、@ user1787152、およびDevShedフォーラムスレッドからのインスピレーションを使用して、次のコードを思いつきました。

var Department,
    departments = [];

Department = function(title) {
    this.title = title;
    this.subjects = [];
};

function parseTitles( titles )
{
    var i, department, departmentTitle,
        hasDepartment = false;

    departmentTitle = titles.shift();

    for (i=0; i<departments.length; i++) {
        if (departments[i].title === departmentTitle) {
            hasDepartment = true;
            break;
        }
    }

    if (!hasDepartment) {
        department = new Department(departmentTitle);
        departments.push(department);
    }

    departments[i].subjects = titles;
}

科目はナビゲーションの形式として使用されており、コースはJSONを介して照会されます。サブジェクトを配列として保持しています。サブジェクト配列の最後の子がクリックされると、JSONにサブジェクトのコースが照会されます。

@ ben336が唯一の回答を投稿したので、クレジットを付与できるかどうかを確認します。クレジットを付与したいと思います。

于 2013-03-13T18:50:45.557 に答える