いくつかのJSONデータ(オブジェクトの単純な配列)があります。
var input= [
{
"cat": "some",
"id": "0"
},
{
"cat": "some",
"id": "1"
},
{
"cat": "some/category",
"id": "2"
},
{
"cat": "some/category/sub",
"id": "3"
},
{
"cat": "some/other",
"id": "4"
},
{
"cat": "some/thing/different",
"id": "5"
},
{
"cat": "some/thing/different",
"id": "6"
},
{
"cat": "yet/another",
"id": "7"
}
]
カテゴリに基づいて、ネストされたhtmlリストを生成したかったのです。
- いくつかの
- 0
- 1
- カテゴリー
- 2
- サブ
- 3
- 他の
- 4
- もの
- 違う
- 5
- 6
- 違う
- まだ
- 別
- 7
- 別
私の最初のステップは、関数を使用して空のネストされたオブジェクトを作成することでした。
createNestedObject = function(base, names) {
var = 0;
var results = [];
while (i < names.length) {
base = base[names[i]] = base[names[i]] || {};
results.push(i++);
}
return results;
}
次に、「cat」文字列を分割し、ループ内で「ids」をプッシュすることにより、データを入力しました(例:some.category ids.push(7))最終結果は次のとおりです。
var output =
{
"some": {
"ids": [
"0",
"1"
],
"category": {
"ids": [
"2"
],
"sub": {
"ids": [
"3"
]
}
},
"other": {
"ids": [
"4"
]
},
"thing": {
"different": {
"ids": [
"5",
"6"
]
}
},
"yet": {
"another": {
"ids": [
"7"
]
}
}
}
}
ただし、キー名と入れ子の深さが事前にわからないため、構造に多少問題があります。ここに表示されている「出力」または「入力」データからネストされたHTMLリストを生成するにはどうすればよいですか?