嵌套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 ...]

}
我基本上需要在发送到后端之前清理它

  • 每当值包含
    $ref
    时,我不需要键/val对(例如:PROP1.parent没有用处,可以省略)
  • 每当一个值包含
    时,我需要忽略所有其他内容,并将
    的值移动为
    的值(例如: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;
}
如果您有任何问题,请发表评论,以便我扩展答案并澄清