【发布时间】:2015-05-27 22:41:59
【问题描述】:
对于这里的复杂示例,我提前道歉;我试图尽可能地减少它以说明我试图实现的目标
我有一个复杂的结构,需要根据一些条件进行遍历和变换;这是一个应该涵盖大多数场景的(简短)结构示例:
{ 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.parent 没有用,可以省略) - 每当一个值包含
value时,我需要忽略其他所有内容并将value的值移动为key的值(例如:PROP1.employee.products 应该等于 ['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 方法,但无法解决这个问题...
任何帮助将不胜感激
谢谢
【问题讨论】:
标签: javascript recursion lodash data-manipulation