レベルによるJavaScript配列の並べ替え
同じ配列に1対多の関係を持つデータがあります。組織はレベルごとに設立されます。要素の親は常にそれ自体より1レベル高く、parentIdによって参照されます。
この配列からマルチレベル配列を取得する必要があります。最高レベルの要素はメイン配列であり、子はサブ配列です。
入力配列が-
で与えられる場合const arr = [ { _id: 100, level: 3, parentId: null, }, { _id: 101, level: 2, parentId: 100, }, { _id: 102, level: 2, parentId: 100, }, { _id: 103, level: 2, parentId: 100, }, { _id: 104, level: 1, parentId: 101, }, { _id: 105, level: 1, parentId: 102, }, { _id: 106, level: 1, parentId: 101, }, { _id: 107, level: 1, parentId: 103, }, { _id: 108, level: 1, parentId: 102, }, { _id: 109, level: 1, parentId: 103, } ];
その場合、出力構造は次のようになります-
100 | ------------------------------------ | | | 101 102 103 ------- ------ ------ | | | | | | 104 106 105 108 107 109
例
このためのコードは-
になりますconst arr = [{ _id: 100, level: 3, parentId: null, }, { _id: 101, level: 2, parentId: 100, }, { _id: 102, level: 2, parentId: 100, }, { _id: 103, level: 2, parentId: 100, }, { _id: 104, level: 1, parentId: 101, }, { _id: 105, level: 1, parentId: 102, }, { _id: 106, level: 1, parentId: 101, }, { _id: 107, level: 1, parentId: 103, }, { _id: 108, level: 1, parentId: 102, }, { _id: 109, level: 1, parentId: 103, }]; const prepareTree = (arr = [], root = null) => { let res; const obj = Object.create(null); arr.forEach(el => { el.children = obj[el._id] && obj[el._id].children; obj[el._id] = el; if (el.parentId === root) { res = el; } else { obj[el.parentId] = obj[el.parentId] || {}; obj[el.parentId].children = obj[el.parentId].children || []; obj[el.parentId].children.push(el); } }); return res; }; console.log(JSON.stringify(prepareTree(arr), undefined, 4));
出力
そして、コンソールの出力は-
になります{ "_id": 100, "level": 3, "parentId": null, "children": [ { "_id": 101, "level": 2, "parentId": 100, "children": [ { "_id": 104, "level": 1, "parentId": 101 }, { "_id": 106, "level": 1, "parentId": 101 } ] }, { "_id": 102, "level": 2, "parentId": 100, "children": [ { "_id": 105, "level": 1, "parentId": 102 }, { "_id": 108, "level": 1, "parentId": 102 } ] }, { "_id": 103, "level": 2, "parentId": 100, "children": [ { "_id": 107, "level": 1, "parentId": 103 }, { "_id": 109, "level": 1, "parentId": 103 } ] } ] }
-
JavaScriptの配列slice()
JavaScript配列slice()メソッドは、選択したアイテムの新しい配列をより大きな配列で返します。元のアレイは変更されません。 以下は、配列slice()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&
-
JavaScriptの配列shift()
JavaScript配列shift()関数は、配列から最初の要素を削除します- 以下は、配列shift()関数のコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</