![](/img/trans.png)
[英]How to sort an array with parents and children objects with JavaScript?
[英]How to implement Javascript logic in creating array with parents only has children
我不太擅長實現邏輯,因此尋求您的幫助以實現以下邏輯。
我通過以下方式具有父子格式的js對象數組:
"categories": {
"data": {
"1": {
"id": 1,
"name": "Churches & Religious Org.",
"description": "Church\/religious organization",
"parent": 267,
"icon": "home"
},
"2": {
"id": 2,
"name": "Bands & Musicians",
"description": "Musician\/band",
"parent": 259,
"icon": "music-note"
},
"3": {
"id": 3,
"name": "Products & Services",
"description": "Product\/service",
"parent": 260,
"icon": "cube"
},
"4": {
"id": 4,
"name": "Actors & Directors",
"description": "Actor\/director",
"parent": 256,
"icon": "film-marker"
},
"5": {
"id": 5,
"name": "Athletes & Players",
"description": "Athlete",
"parent": 264,
"icon": "ios-americanfootball"
},
"6": {
"id": 6,
"name": "Movies",
"description": "Movie",
"parent": 256,
"icon": "ios-film"
},
"7": {
"id": 7,
"name": "TV Shows",
"description": "TV show",
"parent": 256,
"icon": "ios-videocam"
},
"8": {
"id": 8,
"name": "Professional Teams",
"description": "Sports Team",
"parent": 264,
"icon": ""
},
"9": {
"id": 9,
"name": "Politicians",
"description": "Politician",
"parent": 263,
"icon": ""
},
"10": {
"id": 10,
"name": "Food Products",
"description": "Food & Beverage Company",
"parent": 258,
"icon": ""
}};
從上面可以看到,我在有parent_id字段的數組中有元素。
現在,基本上,我希望有一個函數來接收此輸入,創建此數組的修改版本,在這里,我將僅列出具有任意數量子元素的元素的列表。
也就是說,如果任何元素具有不帶任何子元素的parent_id,則在列表中將不會添加該元素。
有孩子的元素。
var obj = { "categories": { "data": { "1": { "id": 1, "name": "Churches & Religious Org.", "description": "Church\\/religious organization", "parent": 267, "icon": "home" }, "2": { "id": 2, "name": "Bands & Musicians", "description": "Musician\\/band", "parent": 259, "icon": "music-note" }, "3": { "id": 3, "name": "Products & Services", "description": "Product\\/service", "parent": 260, "icon": "cube" }, "4": { "id": 4, "name": "Actors & Directors", "description": "Actor\\/director", "parent": 256, "icon": "film-marker" }, "5": { "id": 5, "name": "Athletes & Players", "description": "Athlete", "parent": 264, "icon": "ios-americanfootball" }, "6": { "id": 6, "name": "Movies", "description": "Movie", "parent": 256, "icon": "ios-film" }, "7": { "id": 7, "name": "TV Shows", "description": "TV show", "parent": 256, "icon": "ios-videocam" }, "8": { "id": 8, "name": "Professional Teams", "description": "Sports Team", "parent": 264, "icon": "" }, "9": { "id": 9, "name": "Politicians", "description": "Politician", "parent": 263, "icon": "" }, "10": { "id": 10, "name": "Food Products", "description": "Food & Beverage Company", "parent": 258, "icon": "" } } } } var elemetsWithChildren = []; for (var propt in obj.categories.data) { if (elemetsWithChildren.indexOf(obj.categories.data[propt].parent) == -1) { elemetsWithChildren.push(obj.categories.data[propt].parent); } } console.log(elemetsWithChildren);
有了這個,您就有了一個帶有子元素和數量的對象
var elemetsWithChildren = {};
for(var propt in obj.categories.data){
let parent = obj.categories.data[propt].parent
if(!elemetsWithChildren.hasOwnProperty(parent)){
elemetsWithChildren[parent] = 1;
}else{
elemetsWithChildren[parent]++;
}
}
console.log(elemetsWithChildren);
如所評論; 您的“數組”不是數組。 您可以使用Object.values將其轉換為數組。 然后將其映射為僅采用父值。
現在有了一個數組,其值是項目父項的ID。 您可以使用這些ID來創建帶有reduce的新對象,假設您的對象具有一個ID為{id:{id:id:...},otherid:{id:otherid,...},...
var data = { "1": { "id": 1, "name": "Churches & Religious Org.", "description": "Church\\/religious organization", "parent": 2, "icon": "home" }, "2": {//2 doesn't have a parent "id": 2, "name": "Bands & Musicians", "description": "Musician\\/band", "icon": "music-note" }, "3": { "id": 3, "name": "Products & Services", "description": "Product\\/service", "parent": 1, "icon": "cube" } }; console.log( Object.values(data) .map(d=>d.parent)//get only parent values .filter(parent=>parent)//remove those that don't have parent //reduce to a new object that only contains items that had other items // with it's id as their parent .reduce( (result,item)=>{ result[item]=data[item]; return result; }, {} ) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.