嵌套Javascript对象:递归和;复杂的;转化(含lodash) 我为这里的复杂例子提前道歉;我试着尽可能地缩减它,以说明我试图实现的目标
我有一个复杂的结构,需要根据某些条件进行遍历和转换;下面是一个(简短的)结构示例,它应该涵盖大多数场景:嵌套Javascript对象:递归和;复杂的;转化(含lodash) 我为这里的复杂例子提前道歉;我试着尽可能地缩减它,以说明我试图实现的目标,javascript,recursion,lodash,data-manipulation,Javascript,Recursion,Lodash,Data Manipulation,我有一个复杂的结构,需要根据某些条件进行遍历和转换;下面是一个(简短的)结构示例,它应该涵盖大多数场景: { PROP1: { metadata: Object, // somewhere deeper in metadata I have a `value` key parent: { $ref: String }, employee: { parent: { $ref: String }, id: St
{ 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 ...]
}
我基本上需要在发送到后端之前清理它
- 每当值包含
时,我不需要键/val对(例如:PROP1.parent没有用处,可以省略)$ref
- 每当一个值包含
时,我需要忽略所有其他内容,并将值
的值移动为值
的值(例如:PROP1.employee.products应等于['String','String','String'])键
- 像
、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;
}
如果您有任何问题,请发表评论,以便我扩展答案并澄清