给定 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"
}]
}]
}
我想通过从内容管理系统返回的以下对象集合 ID
对 facetItems
进行分组,因为此列表决定顺序:
"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();
最佳答案
这是一个工作示例
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>
基本上,我正在映射所有公司类型,向每个类型添加一个属性(property)公司并寻找相应的公司
关于javascript - 与嵌套对象属性相比,下划线 GroupBy 单个方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36094388/