嵌套Javascript对象:递归和“复杂”转换(使用lodash)
Nested Javascript Object : recursion and "complex" transformation (with lodash)
我提前为这个复杂的例子道歉;我试着尽可能地精简它来说明我想要达到的效果
我有一个复杂的结构,我需要根据一些条件遍历和变换;下面是一个(简短的)结构示例,它应该涵盖大多数场景:
{ PROP1: {
metadata: Object, // somewhere deeper in metadata I have a `value` key
parent: { $ref: String },
employee: {
parent: { $ref: String },
id: String,
metadata: Object,
products: {
metadata: Object,
model: { $ref: String },
type: 'array',
value: ["String", "String" , "String"] ,
[...]
},
model: {
id: String,
email: {
metadata: Object,
value: 'a@b.com',
type: 'string',
validity: Object,
[...]
},
name: {
firstName: {
metadata: Object,
value: 'John',
type: String,
validity: Object,
[...]
},
lastName: {
metadata: Object,
value: 'Smith',
type: String,
validity: Object,
[...]
},
}
},
operations: {
id: String,
items: [
{ action: {value: "UPDATE", model: {$ref: String }, [...] },
{...}
],
metadata: Object,
[...]
}
}
},
PROP2: {
// similar as PROP1
},
[... and so on ...]
}
我基本上需要在把它发送到后端之前清理它;
- 每当一个值包含
$ref
时,我不想要键/值对(例如:PROP1)。 - 每当一个值包含
value
时,我需要省略其他所有内容,并将value
的值移动为key
的值(例如:PROP1.employee)。产品应等于['字符串','字符串','字符串']) - 键,如
id
,metadata
,validity
(等)可以完全忽略其内容
所以最终结果应该沿着这些行:
{ PROP1: {
employee: {
products: ['item','item','item'],
model: {
email: 'a@b.com',
name: { firstName: 'John', lastName: 'Smith'},
},
operations: [
{action: 'UPDATE'}
]
}
},
PROP2: { ... }
}
我尝试了很多不同的方法,使用不同的lodash
方法,但我无法理解这个…
任何帮助都将不胜感激
谢谢
在伪代码中,尝试这样做。当你遇到麻烦时,执行细节并发布更多信息。
var ignoreKeyArray = ["id", ...] // keys to ignore and remove
var newJSON = "{}";
for (property in JSON) {
var newProp = parseJSON(key, property);
insert newProp in newJSON object
}
var parseJSON = function (key, jsonBlob) {
if (key in ignoreKeyArray || jsonBlob contains value "$ref")
return "";
var jsonOut = key + ": {}";
for (child in jsonBlob) {
add parseJSON(child) to jsonOut;
}
return jsonOut;
}
如果你有任何问题,请评论,这样我可以扩展答案并澄清。
相关文章:
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何使用jquery将base64图像路径转换为真实路径
- 如何使用下划线js转换这些数据
- 如何使用split()将1.18.0-AAA-1转换为1.18.0js
- 如何转换使用CAPSLOCK键入的密码的特殊字符
- 转换:使用 Javascript 翻译 Y
- 转换使用 data() 保存的字符串表单对象
- Json到excel文件的转换使用javascript
- 按钮转换使用javascript和css,如何临时禁用转换
- d3中的颜色转换使用经过的时间
- 画布转换-使用填充url时的奇怪行为
- PDF到DOM转换使用javascript
- Javascript类型强制转换使用parseFloat(). tofixed()
- HTML到word转换使用javascript
- 日期转换使用javascript将日期转换为上一个日期
- React 中的变量转换使用 ReactCSSTransitionGroup
- 嵌套Javascript对象:递归和“复杂”转换(使用lodash)
- XML到CSV转换使用Javascript