Javascript 像SQL内部联接一样联接两个对象
我有两个对象,如:Javascript 像SQL内部联接一样联接两个对象,javascript,arrays,object-literal,Javascript,Arrays,Object Literal,我有两个对象,如: countries = [ { id: 1, name: 'India', image: 'thumb15.jpg' }, { id: 2, name: 'Africa', image: 'thumb11.jpg' }, { id: 3, name: 'Kenya', image: 'thumb10.jpg' } ]; cities = [ { id: 1, name: 'Ahmedabad', country_id: 1 }, {
countries = [
{ id: 1, name: 'India', image: 'thumb15.jpg' },
{ id: 2, name: 'Africa', image: 'thumb11.jpg' },
{ id: 3, name: 'Kenya', image: 'thumb10.jpg' }
];
cities = [
{ id: 1, name: 'Ahmedabad', country_id: 1 },
{ id: 2, name: 'Vadodara', country_id: 1 },
{ id: 3, name: 'Cairo', country_id: 2 },
{ id: 4, name: 'Kinshasa', country_id: 2 },
{ id: 5, name: 'Luanda', country_id: 2 },
{ id: 6, name: 'Nairobi', country_id: 3 },
{ id: 7, name: 'Nakuru', country_id: 3 },
{ id: 8, name: 'Mombasa', country_id: 3 },
];
我想结合这两个对象,就像SQL有内部连接一样
例如,我想对上述两个对象执行以下操作查询
SELECT * from countries INNER JOIN cities ON cities.country_id = countries.id
我的预期输出如下所示:
expected_result = [
{ id: 1, name: "Ahmedabad", country_id: 1, country_name: "India", country_image: "thumb15.jpg" },
{ id: 2, name: "Vadodara", country_id: 1, country_name: "India", country_image: "thumb15.jpg" },
{ id: 3, name: "Cairo", country_id: 2, country_name: "Africa", country_image: "thumb11.jpg" },
{ id: 4, name: "Kinshasa", country_id: 2, country_name: "Africa", country_image: "thumb11.jpg" },
{ id: 5, name: "Luanda", country_id: 2, country_name: "Africa", country_image: "thumb11.jpg" },
{ id: 6, name: "Nairobi", country_id: 3, country_name: "Kenya", country_image: "thumb10.jpg" },
{ id: 7, name: "Nakuru", country_id: 3, country_name: "Kenya", country_image: "thumb10.jpg" },
{ id: 8, name: "Mombasa", country_id: 3, country_name: "Kenya", country_image: "thumb10.jpg" }
];
提前感谢。您可以为国家/地区的所有项目创建一个哈希表,其中id是键,值是所需格式的新对象
{
1: {
country_name: "India",
image: "thumb15.jpg"
},
2: {
country_name: "Africa",
image: "thumb11.jpg"
},
3: {
country_name: "Kenya",
image: "thumb10.jpg"
}
}
然后使用哈希表中的原始键/值和新属性映射新对象
使用的方法,按外观顺序:
具有
var countries=[{id:1,名称:'India',图像:'thumb15.jpg'},{id:2,名称:'Africa',图像:'thumb11.jpg'},{id:3,名称:'Kenya',图像:'thumb10.jpg'}],
城市=[{id:1,姓名:'Ahmedabad',国家id:1},{id:2,姓名:'Vadodara',国家id:1},{id:3,姓名:'Cairo',国家id:2},{id:4,姓名:'Kinshasa',国家id:2},{id:5,姓名:'Luanda',国家id:2},{id:6,姓名:'Nairobi',国家id:3},{id:7,姓名:'Nakuru国家id:3},{id:8,姓名:'Mombasa',国家编号:3}],
countriesH=countries.reducer,{id,name:country_name,…o}=>
r[id]={country_name,…o},r,{},
结果=cities.mapo=>{…o,…countriesH[o.country\u id]};
console.logresult;
.作为控制台包装{max height:100%!important;top:0;}可以使用map函数和map collection获得所需的国家/地区:
const uniqueCountries = new Map(countries.map(s => [s.id, s]));
const result = cities.map(s => ({ ...s,
country_name: uniqueCountries.get(s.country_id).name }));
例如:
让国家=[
{id:1,名称:'India',图像:'thumb15.jpg'},
{id:2,名称:'Africa',图像:'thumb11.jpg'},
{id:3,名称:'Kenya',图像:'thumb10.jpg'}
];
让城市=[
{id:1,姓名:'Ahmedabad',国家编号:1},
{id:2,姓名:'Vadodara',国家编号:1},
{id:3,姓名:'Cairo',国家编号:2},
{id:4,姓名:'金沙萨',国家{id:2},
{id:5,名称:'Luanda',国家_id:2},
{id:6,姓名:'Nairobi',国家编号:3},
{id:7,姓名:'Nakuru',国家编号:3},
{id:8,姓名:'Mombasa',国家编号:3},
];
const uniqueCountries=新Mapcountries.maps=>[s.id,s];
const result=cities.maps=>{…s,
国家名称:uniqueCountries.get.country\u id.name};
console.logresult;我编写了一个模拟dotnet的linq的程序,它使这变得轻而易举:
import { blinq } from "blinq";
//...
const joinedData = blinq(countries)
.join(
cities,
co => co.id,
ci => ci.country_id,
(country, city) => ({ country, city })
)
.toArray();
常数{
布林克
}=window.blinq;
常量国家=[{
id:1,
名称:印度,
图片:thumb15.jpg
},
{
id:2,
名称:非洲,
图片:thumb11.jpg
},
{
id:3,
姓名:肯尼亚,
图片:thumb10.jpg
}
];
康斯特城市=[{
id:1,
姓名:艾哈迈达巴德,
国家编号:1
},
{
id:2,
姓名:瓦多达拉,
国家编号:1
},
{
id:3,
姓名:开罗,
国家编号:2
},
{
id:4,
姓名:金沙萨,
国家编号:2
},
{
id:5,
姓名:罗安达,
国家编号:2
},
{
id:6,
姓名:内罗毕,
国家编号:3
},
{
id:7,
姓名:纳库鲁,
国家编号:3
},
{
id:8,
姓名:蒙巴萨,
国家编号:3
}
];
const joinedData=blinqcountries
参加
城市,
co=>co.id,
ci=>ci.country\u id,
国家、城市=>{
国
城市
}
.托雷;
console.logJSON.stringifyjoinedData,null,2
请学习。谢谢@str。我会读这个。嗨,谢谢。这个解决方案对我有效,但我不明白你做了什么。你能给我解释一下吗。嗨,谢谢。这个解决方案对我也有效,但我不知道javascript映射和映射集合。所以我不明白。你能提供一些信息来学习这个概念吗。