次のようなテーブルからJSONデータを取得しています(非常に単純化されています):
私が取得しているJSON形式は次のとおりです:
const myObjOriginal = {
"rows": [{
"name": "row 1",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "first level 2",
"id": 2
}, {
"name": "endpoint 1",
"id": 4
}]
}, {
"name": "row 2",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "first level 2",
"id": 2
}, {
"name": "endpoint 2",
"id": 5
}]
}, {
"name": "row 3",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "second level 2",
"id": 3
}, {
"name": "endpoint 3",
"id": 6
}]
}]
};
これで必要なことは、テーブルではなくツリーに変換することです。出力は次のようになります。
const goalObject = [{
"name": "level 1",
"id": 2,
"children": [{
"name": "first level 2",
"id": 2,
"children": [{
"name": "endpoint 1",
"id": 4
}, {
"name": "endpoint 2",
"id": 5
}]
}, {
"name": "second level 2",
"id": 3,
"children": [{
"name": "endpoint 3",
"id": 6
}]
}]
}];
私は、map、reduce、filter、for loop、forEachの両方のすべての種類を試しましたが、役に立ちませんでした。
私は何らかの形で再帰関数を作成する必要があることを認識していますが、それを機能させることもできていません。
ここに私が試した一つの例がありますが、それは完全に間違っていることがわかります...
function getChildrenOfCurrentItem(rowIndex = 0, cellIndex = 0) {
let current = {};
let myObj = {};
for(let i = 0; i < myCopy.rows.length; i++){
next = myCopy.rows[i].cells[cellIndex];
const cells = myCopy.rows[i].cells;
const isSame = compareObjects(current, next);
if(!isSame){
current = next;
myObj.item = current;
//cellIndex++;
for(let j = 0; j < cells.length; j++){
let cell = cells[j];
console.log('cell', cell);
}
}
console.log('myObj', myObj);
//cellIndex++;
if(cellIndex < max) {
getChildrenOfCurrentItem(rowIndex, cellIndex);
}
rowIndex++;
}
return myObj;
}
関連した質問
- アイテムを挿入する前の条件とreactjsにメッセージを表示する
- javascriptを使用してjsonデータを上から下にフェッチします
- 関数を書くのに助けが必要
- オブジェクトのネストされたUint8Array(32)、文字列、btoa、localStorage、atob、Uint8Array(32)
- アクセスするインデックスのみを知っている動的にネストされた配列を変更する
- Qlik Engine JSONAPIを使用して視覚化データをエクスポートする
- 配列を並べ替えて、そこからreaminingオブジェクトを削除します
- Reactjs無限スクロールコンポーネントは常に新しいデータをレンダリングします
- 単一、配列、またはネストされた深層構造であるJSONの構造がわからない場合は、JSONのキーと値でオブジェクトを検索します
- 文字列内からカンマなどを削除するにはどうすればよいですか?
同じ
id
を持つグループを探すことにより、反復アプローチを使用できます。 。