簡體   English   中英

如何在與父母一起創建數組時實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM