【问题标题】:Underscore GroupBy A Single Facet Compared Against Nested Object Properties下划线 GroupBy 单个方面与嵌套对象属性的比较
【发布时间】:2016-07-05 19:09:47
【问题描述】:

给定 this JSON 结果,或如下所示:

{
  "facetItems": [{
    "Company_Name": "Sample Brookline Company",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Brookline",
    "State": "MA",
    "Latitude": 42.3325651,
    "Longitude": -71.1140136,
    "Company_Type": [{
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }]
  }, {
    "Company_Name": "Sample Everett Company",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Everett",
    "State": "MA",
    "Latitude": 42.4030189,
    "Longitude": -71.0454874,
    "Company_Type": [{
      "ID": "id1",
      "Display_Value": "G"
    }, {
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id3",
      "Display_Value": "E"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }, {
      "ID": "id5",
      "Display_Value": "C"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 1",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091051,
    "Longitude": -71.0675369,
    "Company_Type": [{
      "ID": "id1",
      "Display_Value": "G"
    }, {
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id3",
      "Display_Value": "E"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }, {
      "ID": "id5",
      "Display_Value": "C"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 2",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091059,
    "Longitude": -71.0675379,
    "Company_Type": [{
      "ID": "id1",
      "Display_Value": "G"
    }, {
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id3",
      "Display_Value": "E"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 3",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091089,
    "Longitude": -71.0675399,
    "Company_Type": [{
      "ID": "id3",
      "Display_Value": "E"
    }, {
      "ID": "id5",
      "Display_Value": "C"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 4",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091101,
    "Longitude": -71.0675401,
    "Company_Type": [{
      "ID": "id1",
      "Display_Value": "G"
    }, {
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id3",
      "Display_Value": "E"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 5",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091131,
    "Longitude": -71.0675431,
    "Company_Type": [{
      "ID": "id3",
      "Display_Value": "E"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }, {
      "ID": "id5",
      "Display_Value": "C"
    }]
  }, {
    "Company_Name": "Sample Wakefield Company 6",
    "Address_Line_1": "242 Oak Boulevard",
    "Address_Line_2": "",
    "City": "Wakefield",
    "State": "MA",
    "Latitude": 42.5091151,
    "Longitude": -71.0675451,
    "Company_Type": [{
      "ID": "id1",
      "Display_Value": "G"
    }, {
      "ID": "id2",
      "Display_Value": "A"
    }, {
      "ID": "id4",
      "Display_Value": "B"
    }, {
      "ID": "id5",
      "Display_Value": "C"
    }]
  }]
}

我想按照从内容管理系统返回的以下对象集合 IDfacetItems 进行分组,因为此列表决定了顺序:

        "Company_Type": [
          { "ID": "id1", "Display_Value": "G" },
          { "ID": "id2", "Display_Value": "A" },
          { "ID": "id3", "Display_Value": "E" },
          { "ID": "id4", "Display_Value": "B" },
          { "ID": "id5", "Display_Value": "C" }
        ]


结果应该是什么样子

{
    "Company_Type": [
      {
        "ID": "id1",
        "Display_Value": "G",
        "Companies": [
            {
                "Hospital_Name": "Sample Brookline Company",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Brookline",
                "State": "MA",
                "Latitude": 42.3325651,
                "Longitude": -71.1140136,
                "Company_Type": {}
            },
            {
                "Hospital_Name": "Sample Brookline Company",
                "Address_Line_1": "442 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Brookline",
                "State": "MA",
                "Latitude": 42.1231213,
                "Longitude": -71.5454354,
                "Company_Type": {}
            }
        ]
      },
      {
        "ID": "id2",
        "Display_Value": "A",
        "Companies": [ { "more companies that match this grouping" }]
      }
    ]
}


我的尝试

facetItems获取唯一的Company_Types

_.chain(self.results()).map(function (f) { return f.Hospital_Type })
    .flatten().uniq(function (f_ht) { return f_ht.ID }).value();

【问题讨论】:

    标签: javascript json knockout.js underscore.js


    【解决方案1】:

    这是一个工作示例

    var 
        facetItems = [
            {
                "Company_Name": "Sample Brookline Company",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Brookline",
                "State": "MA",
                "Latitude": 42.3325651,
                "Longitude": -71.1140136,
                "Company_Type": [
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  }
                ]
            },
            {
                "Company_Name": "Sample Everett Company",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Everett",
                "State": "MA",
                "Latitude": 42.4030189,
                "Longitude": -71.0454874,
                "Company_Type": [
                  {
                    "ID": "id1",
                    "Display_Value": "G"
                  },
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  },
                  {
                    "ID": "id5",
                    "Display_Value": "C"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 1",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091051,
                "Longitude": -71.0675369,
                "Company_Type": [
                  {
                    "ID": "id1",
                    "Display_Value": "G"
                  },
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  },
                  {
                    "ID": "id5",
                    "Display_Value": "C"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 2",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091059,
                "Longitude": -71.0675379,
                "Company_Type": [
                  {
                    "ID": "id1",
                    "Display_Value": "G"
                  },
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 3",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091089,
                "Longitude": -71.0675399,
                "Company_Type": [
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  },
                  {
                    "ID": "id5",
                    "Display_Value": "C"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 4",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091101,
                "Longitude": -71.0675401,
                "Company_Type": [
                  {
                    "ID": "id1",
                    "Display_Value": "G"
                  },
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 5",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091131,
                "Longitude": -71.0675431,
                "Company_Type": [
                  {
                    "ID": "id3",
                    "Display_Value": "E"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  },
                  {
                    "ID": "id5",
                    "Display_Value": "C"
                  }
                ]
            },
            {
                "Company_Name": "Sample Wakefield Company 6",
                "Address_Line_1": "242 Oak Boulevard",
                "Address_Line_2": "",
                "City": "Wakefield",
                "State": "MA",
                "Latitude": 42.5091151,
                "Longitude": -71.0675451,
                "Company_Type": [
                  {
                    "ID": "id1",
                    "Display_Value": "G"
                  },
                  {
                    "ID": "id2",
                    "Display_Value": "A"
                  },
                  {
                    "ID": "id4",
                    "Display_Value": "B"
                  },
                  {
                    "ID": "id5",
                    "Display_Value": "C"
                  }
                ]
            }
        ]
    ;
    
    
    var companyTypes = [
              { "ID": "id1", "Display_Value": "G" },
              { "ID": "id2", "Display_Value": "A" },
              { "ID": "id3", "Display_Value": "E" },
              { "ID": "id4", "Display_Value": "B" },
              { "ID": "id5", "Display_Value": "C" }
            ]
    				
    var finalResult = _.map(companyTypes,function(a){
    		a.Companies = _.filter(facetItems, function(b){
    													return _.findWhere(b.Company_Type,{ID:a.ID});
    										});
    		return a;
    })
    
    document.getElementById('result').innerText = JSON.stringify(finalResult)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
    <div id="result">
    
    </div>

    基本上我正在映射所有公司类型,为每个类型添加一个属性 Companies 并寻找相应的公司

    【讨论】:

    • 我不知道您可以映射新属性,谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多