js將物件陣列中具有父子關係的資料換成樹形結構
本文根據《js將有父子關係的資料轉換成樹形結構資料》部落格進行適當改編。let allRes = [ { id: 4, resName: "刪除角色", parentId: 2 }, { id: 3, resName: "編輯角色", parentId: '' }, { id: 2, resName: "設定許可權", parentId: '' }, { id: 5, resName: "新增使用者", parentId: 4 }, { id: 6, resName: "更新使用者", parentId: 4 }, { id: 7, resName: "刪除使用者", parentId: 6 }, { id: 8, resName: "重置密碼", parentId: 3 }, { id: 9, resName: "新增地區", parentId: 5 }, { id: 10, resName: "編輯地區", parentId: 6 } ]; function treeObj(originObj){ //物件深拷貝 let obj ={}; for (key in originObj){ var val = originObj[key]; obj[key] = typeof val === 'object' ? arguments.callee(val):val; } //物件新增children鍵值,用於存放子樹 obj['children'] = []; return obj; } //data:帶轉換成樹形結構的物件陣列 //attributes:物件屬性 function toTreeData (data, attributes) { let resData = data; let tree = []; //找尋根節點 for (let i = 0; i < resData.length; i++) { if (resData[i][attributes.parentId] === ''|| resData[i][attributes.parentId] === null) { tree.push( treeObj(resData[i]) ); resData.splice(i, 1); i--; } } run(tree); //找尋子樹 function run(chiArr) { if (resData.length !== 0) { for (let i = 0; i < chiArr.length; i++) { for (let j = 0; j < resData.length; j++) { if (chiArr[i][attributes.id] === resData[j][attributes.parentId]){ let obj = treeObj(resData[j]); chiArr[i].children.push(obj); resData.splice(j, 1); j--; } } run(chiArr[i].children); } } } return tree; } let data = allRes; // 屬性配置資訊 let attributes = { id: 'id', parentId: 'parentId', }; let treeData = toTreeData(data, attributes); console.log(treeData); </script>
相關推薦
js將物件陣列中具有父子關係的資料換成樹形結構
let allRes = [ { id: 4, resName: "刪除角色", parentId: 2 }, { id: 3, resName: "編輯角色", parentId: '' }, {
[JS] 查詢物件陣列中某屬性的最大最小值
查詢物件陣列中某屬性的最大最小值的快捷方法 例如要查詢array陣列中物件的value屬性的最大值 var array=[ { "index_id": 119, "area_id": "18335623",
js如何向陣列中新增物件並通過ajax向後臺傳遞list資料
js動態向陣列新增物件,並通過ajax提交List資料到後臺 var data=[{name: '張三',age: 18,id: 1},{name: '李四',age: 22,id: 2}]; var test= []; for (var i = 0; i < data.le
js把屬性具有父子關係的json檔案轉變成json樹
方法也是百度來的,親測可用 希望能幫助到大家 <script> var data = [{ "address": "蕪湖弋江區", "id": "1", "latitude": 31.379996, "longitude": 118
JavaScript 將數組中具有相同值的對象 取出組成新的數組
else 一個數 function 內容 pre 統一 .so gpo fun 1 var arr=[{name:2,id:3},{name:2,id:4},{name:3,id:5},{name:3,id:6},{name:1,id:1},{name:1,id:2}
js將數組中一個或多個字段相同的子元素中合並
++ body 遇到 return json 合並 arr 可能 var 最近js中遇到js將數組中一個或多個字段相同的子元素中合並,相信很多朋友也有遇到,大家可能有多種方法,我在這裏記錄一個相對簡單的方法,當然大家如有其它更好的方法,請提出來大家共同學習。 //將經濟事
bootstrap 多選按鈕實現方式,js,jQuery刪除陣列中指定元素
bootstrap有許多,非常漂亮的設計,不用自己苦惱於css 的使用。 bootstrap使用,實現多選方法: 1、使用bootstrap的表格標籤,表格內容為PHP返回前端資料, <table class="table table-hover table-bordered"
js怎麼刪除陣列中重複的元素?
刪除陣列中重複的元素 剛剛看到這篇文章,就立馬過來收藏,雖然還沒看懂,希望我再研究一下面是統計陣列中重複元素的個數 var arr = []; var result = [‘2017年6月’, ‘2017年6月’, ‘2017年6月’, ‘2017年5月’, ‘2017年5月’, ‘20
js 將數組中的每一項安裝奇偶重新組合成一個數組對象
方法 else meta {} alt utf lse img png <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>字符
JS-從排序陣列中刪除重複項
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例1 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並
JS刪除JSON陣列中的元素的兩種方法:delete和splice
最近的需求中,需要從JSON陣列中刪除元素,之前不太瞭解,特地查了一下,總結一下: splice(startIndex,count);這個方法用於從陣列的第startIndex位開始,刪除count個元素。 說明: 1、滿足條件的元素直接被刪除,腳標重信排 2、sta
js求物件陣列的交集/並集/差集/去重
1.求交集 var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; var arr1Id = [1,2,3] var arr2 = [{name:'name1',id
JS找出陣列中唯一不同的數
一個數組中只有一個數是唯一的,其他數都是成對出現,找出這個唯一的數。 分析:由於位運算子異或運算的特點,即兩個相同的數進行異或運算時,其結果為0,所以當將陣列中所有的元素進行異或運算時,其結果必定為那
js簡單刪除陣列中任意元素
////刪除陣列中任意元素 ///arr需要去除元素的陣列 ///str需要去除的內容 function spliceArr(arr,str){ for (var i = 0; i < arr.length; i++) { if (arr
js將物件轉成json格式
/** * 序列化成json字串 * @param obj * @return */ function Serialize(obj){ switch(obj.construc
js隨機從陣列中取出幾個元素
JS如何從一個數組中隨機取出一個元素或者幾個元素。假如陣列為var items = ['1','2','4','5','6','7','8','9','10'];1.從陣列items中隨機取出一個元素/
輸出一個一維陣列中的最大值、最小值、全部元素的和,並將此陣列中的值按逆序重新存放。例如原先a[0]~a[4]存放2 8 7 5 3,逆序存放後 a[0]~a[4]變為存放3 5 7 8 2
#include <iostream> using namespace std; int main() {int a[5],d[5],i,k,m,n,p,sum,b,c; cout<<"please enter five numbers:"; for
js移除陣列中元素-- 倒著遍歷陣列,繞過改變下標的問題
題目描述 移除陣列 arr 中的所有值與 item 相等的元素,直接在給定的 arr 陣列上進行操作,並將結果返回 示例1 輸入 [1, 2, 2, 3, 4, 2, 2], 2 輸出 [1, 3, 4] 我一開始還好死不死用的foreach,忽略
java中從一個物件陣列中刪除元素和判斷物件陣列存了幾個元素的方法
//從陣列中刪除元素方法 private int arrayTotal=0; Pet[] pets=new Pet[10]; pets[1]=dog; pets[2]=cat; pets[3]=pig
Vue.js之在陣列中插入重複資料
1、在預設的情況下,Vue.js預設不支援往陣列中加入重複的資料。可以使用track-by="$index"來實現。 2、不使用track-by="$index"的陣列插入,陣列不支援重複資料的插入