首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存父级以生成树数组

保存父级以生成树数组
EN

Stack Overflow用户
提问于 2017-09-18 08:55:20
回答 1查看 55关注 0票数 1

我很难在JS中操作一个树对象,它可能很简单,但我找不到。

这是一个对象:

代码语言:javascript
复制
{
"100-silk": {
    "url": "https://www.striiiipes.com/product-category/100-silk/"
},
"apparel": {
    "url": "https://www.striiiipes.com/product-category/apparel/"
},
"ipad-accessories": {
    "url": "https://www.striiiipes.com/product-category/ipad-accessories/",
    "ipad-air": {
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-air/"
    },
    "ipad-mini": {
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-mini/"
    },
    "ipad-pro": {
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/",
        "ipad-pro-12-9": {
            "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-12-9/"
        },
        "ipad-pro-9-7": {
            "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-9-7/"
        }
    }
}

我使用一个简单的递归函数来处理所有的孩子:

代码语言:javascript
复制
function parseCategories(a) {
    if (typeof a === 'object') {
        $.each(a, function (i, v) {
            //if we only have a "url" object, then we're on last branch and can parse it
            if (Object.keys(v).length === 1 && 'url' in v) {
                //dosomething
            } else { // then we need to go deeper in the tree
                parseCategories(v);
            }
        })
    }
}

我想使用这个函数来保存面包屑,并得到这样一个对象:

代码语言:javascript
复制
"100-silk": {
    "categories" : ["100-silk"],
    "url": "https://www.striiiipes.com/product-category/100-silk/"
},
"apparel": {
    "categories" : ["apparel"],
    "url": "https://www.striiiipes.com/product-category/apparel/"
},
"ipad-accessories": {
    "categories" : ["ipad-accessories"],
    "url": "https://www.striiiipes.com/product-category/ipad-accessories/",
    "ipad-air": {
        "categories" : ["ipad-accessories", "ipad-air"],
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-air/"
    },
    "ipad-mini": {
        "categories" : ["ipad-accessories", "ipad-mini"],
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-mini/"
    },
    "ipad-pro": {
        "categories" : ["ipad-accessories", "ipad-pro"],
        "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/",
        "ipad-pro-12-9": {
            "categories" : ["ipad-accessories", "ipad-pro", "ipad-pro-12-9"],
            "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-12-9/"
        },
        "ipad-pro-9-7": {
            "categories" : ["ipad-accessories", "ipad-pro", "ipad-pro-9-7"],
            "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-9-7/"
        }
    }
}

};

所以重点是保存每个孩子和父母的全部面包屑。如何更改解析函数以获得此对象?我也试过在每个循环中传递父程序,但我无法得到我想要的。

我在这里创建了一个小提琴

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-18 09:20:41

您可以检查嵌套对象的属性并分配类别值。

它与支票一起工作,如果

  • object[k]是一个真实的值,并且
  • typeof object[k] === 'object',如果该类型是一个对象,并且
  • !Array.isArray(object[k]),如果实际属性不是数组,比如新添加的category

然后,通过使用以前级别的类别并向其添加实际键,分配一个新的属性category

代码语言:javascript
复制
function updateCategory(object) {        
    Object.keys(object).forEach(function (k) {
        if (object[k] && typeof object[k] === 'object' && !Array.isArray(object[k])) {
            object[k].category = (object.category || []).concat(k);
            updateCategory(object[k]);
        }
    });
}
var data = { "100-silk": { url: "URL/100-silk/" }, apparel: { url: "URL/apparel/" }, "ipad-accessories": { url: "URL/ipad-accessories/", "ipad-air": { url: "URL/ipad-accessories/ipad-air/" }, "ipad-mini": { url: "URL/ipad-accessories/ipad-mini/" }, "ipad-pro": { url: "URL/ipad-accessories/ipad-pro/", "ipad-pro-12-9": { url: "URL/ipad-accessories/ipad-pro/ipad-pro-12-9/" }, "ipad-pro-9-7": { url: "URL/ipad-accessories/ipad-pro/ipad-pro-9-7/" } } } };

updateCategory(data);

console.log(data);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46275251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档