基于输入数组操作复杂对象

问题描述 投票:1回答:2

我有一个复杂的对象,根据输入数组,我需要修改此复杂对象内部的属性。图示如下。我需要基于字段值将它们分组,然后将它们添加到对象的“或”数组(如果字段值相同)。如果不相同,则将其直接添加到“ and”对象数组中。需要从输入数组中读取每个字段,并检查它是否存在于“ filterObj”的“过滤器”中,如果存在,则将其添加到“和”,否则将其添加到“或”。

两者的格式如下所示

//This is the source object where I need to add the below "arr" based on grouping

let filterObj = {
      "feature": "test",
      "filter": {
                 "and": [
                          { "field": "field1","value": "1"}
                        ]
                }
};

//This array needs to be added to above object by grouping based on field
let obj = [
             {"field" : "field1","value": "2"},
             {"field" : "field2","value": "3"},
             {"field" : "field2","value": "4"},
             {"field" : "field3","value" : "5"}
          ]


我希望输出具有以下格式:

var result = {
              "feature": "test",
              "filter": {
                 "and": [
                          {
                           "or" : [
                                    {"field": "field1","value": "1"},
                                    {"field": "field1", "value": "2"}
                                  ]                      
                          },
                          {
                            "or" : [
                                     {"field": "field2","value": "3"},
                                     {"field": "field2","value": "4"},
                                   ]                      
                          },
                          {  "field": "field3", "value": "5"}
                  ]
              } 
}

// The method that I have tried

filterObj.filter.and.or(...obj) ;// Does not work 


我有一个复杂的对象,根据输入数组,我需要修改此复杂对象内部的属性。图示如下。我需要根据字段值将它们分组,然后添加...

javascript arrays ecmascript-6 ecmascript-5
2个回答
2
投票

您可以通过分组来收集所有相同的字段,并将分组中的值分配给and属性。


1
投票

© www.soinside.com 2019 - 2024. All rights reserved.