Javascript 如何使用迭代器之一展平对象?

Javascript 如何使用迭代器之一展平对象?,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我想做一个面包屑。我从后端得到的数据如下: var object = { "Department": { "DeptCode": null, "Description": "123", "DeptName": { "name": "xyz" } }} var result = { "Department.DeptCode": null, "Department.Descrip

我想做一个面包屑。我从后端得到的数据如下:

var object = {
    "Department": {
        "DeptCode": null,
        "Description": "123",
         "DeptName": {
              "name": "xyz"
         }
}}
var result = {
    "Department.DeptCode": null,
    "Department.Description": "123",
    "Department.DeptName.name": "xyz"
}
我想使用下划线或jquery修改对象,如下所示:

var object = {
    "Department": {
        "DeptCode": null,
        "Description": "123",
         "DeptName": {
              "name": "xyz"
         }
}}
var result = {
    "Department.DeptCode": null,
    "Department.Description": "123",
    "Department.DeptName.name": "xyz"
}
我尝试使用UnderScore,但没有得到任何结果。有人告诉我完成这件事的可能方法吗

我的尝试:

var lable = [];

_.each(object, function(key, obj){
    var title = obj;
    if(_.object(key)){
        _.each(key, function(text,obj){
            lable.push(title + '.' + obj + ':' + text);
        })
    }

});

console.log(lable);

尝试创建一个递归函数,如下所示(基于您的小提琴):

检查这把小提琴:

另一种替代方法是用闭包替换全局变量方法,以定义更可重用的扁平化函数:

function flatten(mainObject) {
    var lable = {};
    flattenAux = function(object, title) {
        _.each(object, function(key, obj){
            var newTitle = obj;
            if (key != null && typeof(key)=='object') {
                flattenAux(key, (title) ? title + '.' + newTitle : newTitle);
            } else {
                lable[title + '.' + newTitle] = key;
            }
        });
    };
    flattenAux(mainObject, null);
    return lable;
}

var testResult = flatten(object);

console.log(testResult);

fiddle示例:

为什么不让
展平
返回对象,而不是处理全局变量?这样会更干净、更可重用。我会试试那个选择。