【问题标题】:Nested Javascript Object : recursion and "complex" transformation (with lodash)嵌套 Javascript 对象:递归和“复杂”转换(使用 lodash)
【发布时间】: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


    【解决方案1】:

    在伪代码中,尝试这样的事情。当您遇到麻烦时,实施具体细节并发布更多信息。

    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;
    }
    

    如果您有任何问题,请发表评论,以便我扩展答案并澄清。

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 2019-02-11
      • 2020-01-26
      • 1970-01-01
      • 2019-10-12
      • 2012-02-12
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多