Javascript对象转换与下划线.js或其他东西
Javascript object transform with underscrore.js or something else
我有一个像下面这样的对象:
var obj1 = {
"Prop1": {
"Prop2": {
"Prop2.1": "value1",
"Prop2.2": "value2"
},
"Prop3": {
"Prop3.1": "value3",
"Prop3.2": "value4"
},
"Prop4": {
"Prop4.1": "value5",
"Prop4.2": "value6",
"Prop4.3": "value7"
}
}
};
但是我想把这个对象转换成下面的对象:
var obj1 = {
"data": [
{
"id": "Prop1",
"data": [
{
"id": "Prop2",
"data": [
{"id": "Prop2.1","value": "value1"},
{"id": "Prop2.2","value": "value2"}
]
},
{
"id": "Prop3",
"data": [
{"id": "Prop3.1","value": "value3"},
{"id": "Prop3.2","value": "value4"}
]
},
{
"id": "Prop4",
"data": [
{"id": "Prop4.1","value": "value5"},
{"id": "Prop4.2","value": "value6"},
{"id": "Prop4.3","value": "value7"}
]
},
]
},
]
};
可以看到,对象结构将完全不同。我可以用underscore.js或其他东西轻松地进行此更改吗?
您可以使用迭代或递归的方法来构建新对象。
function convert(object) {
return Object.keys(object).map(function (k) {
var o = { id: k };
if (object[k] !== null && typeof object[k] === 'object') {
o.data = convert(object[k]);
} else {
o.value = object[k];
}
return o;
});
}
var source = { Prop1: { Prop2: { "Prop2.1": "value1", "Prop2.2": "value2" }, Prop3: { "Prop3.1": "value3", "Prop3.2": "value4" }, Prop4: { "Prop4.1": "value5", "Prop4.2": "value6", "Prop4.3": "value7" } } },
target = { data: convert(source) };
console.log(target);
.as-console-wrapper { max-height: 100% !important; top: 0; }
相关文章:
- 为其他JS生成定义“;编译器”;来自TypeScript定义文件
- 节点:'最佳实践'使用其他js文件的js文件
- 地理定位在Jsfidle中工作,但不在任何其他JS编辑器中
- Ajax 请求正在取消页面上的其他 JS 事件
- Meteor-如何从其他JS文件中调用外部类方法
- EXT JS可以't从其他.js中获取Define
- jQuery.menu与其他JS冲突
- Pjax.页面上的其他JS脚本不会;不起作用
- 清除文本区域会中断其他JS函数
- AJAX没有加载其他js和css风格
- 如何将 jquery 和其他.js库与 Angular2 一起使用
- 使用 JS 代码设置鼠标位置,并将位置放在其他 JS 代码中
- 创建一个使用其他 js 库的可嵌入 JavaScript 小部件
- 从其他 JS 执行一个函数
- 迁移解析后无法引用其他 JS 代码
- 如何将 angularjs 变量值获取到其他.js文件
- 用ajax加载的html内容不会检测到其他js函数
- 有没有一种方法可以将json文件与所有其他js文件一起加载
- 当其他JS脚本包含在html页面中时,Ajax请求不起作用
- 有没有办法在不渲染任何其他 js 文件的情况下在 rails 控制器方法中发出警报/弹出窗口