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示例:为什么不让
展平
返回对象,而不是处理全局变量?这样会更干净、更可重用。我会试试那个选择。