[英]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.