Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找到每个国家的大陆_Javascript_Arrays_Typescript_Object - Fatal编程技术网

Javascript 找到每个国家的大陆

Javascript 找到每个国家的大陆,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,我有一系列的大陆和国家: const continents = [ { continent: 'Europe', countries: [ 'Albania', 'Andorra',... ], }, { continent: 'Asia', countries: [ 'Afghanistan', 'Bahrain',... ], }, { continent: 'Afri

我有一系列的大陆和国家:

const continents = [
  {
    continent: 'Europe',
    countries: [
      'Albania',
      'Andorra',...
    ],
  },
  {
    continent: 'Asia',
    countries: [
      'Afghanistan',
      'Bahrain',...
    ],
  },
  {
    continent: 'Africa',
    countries: [
      'Algeria',
      'Angola',...
    ],
  },
  {
    continent: 'Americas',
    countries: [
      'Antigua and Barbuda',
      'Bahamas',...
    ],
  },
]
const countries = ['Angola', 'Andorra']
以及一些国家:

const continents = [
  {
    continent: 'Europe',
    countries: [
      'Albania',
      'Andorra',...
    ],
  },
  {
    continent: 'Asia',
    countries: [
      'Afghanistan',
      'Bahrain',...
    ],
  },
  {
    continent: 'Africa',
    countries: [
      'Algeria',
      'Angola',...
    ],
  },
  {
    continent: 'Americas',
    countries: [
      'Antigua and Barbuda',
      'Bahamas',...
    ],
  },
]
const countries = ['Angola', 'Andorra']
我希望遍历多个国家,并返回一组对象,如下所示:

const result = countries.map(country => {
  return {
    continent: ??,
    country: country,
  }
})
我怎样才能找到每个国家的大陆

我试试这个:

const continent = continents.forEach((continent, i) => {
  const countries = continent.countries
  if (find(countries, value.country)) return continent.continent
})
但我明白了

[ts]并非所有代码路径都返回值。[7030]


通过使用和检查值,可以找到
大陆

const
大陆=[{大陆:'欧洲',国家:[阿尔巴尼亚','安道尔']},{大陆:'亚洲',国家:[阿富汗','巴林']},{大陆:'非洲',国家:[阿尔及利亚','安哥拉']},{大陆:'美洲',国家:[安提瓜和巴布达','巴哈马']},
国家=[“安哥拉”、“安道尔”],
结果=国家。地图(国家=>({
大陆:大陆。查找({countries})=>
国家。包括(国家))。大陆,
国家,,
}));

控制台日志(结果)您需要将
每个国家名称映射到newObj。然后,您可以在
大陆
上使用
find()
方法来确定该大陆obj的
国家
数组是否包含国家名称

const大陆=[
{
欧洲大陆,
国家:[
“阿尔巴尼亚”,
“安道尔”
],
},
{
大陆:"亚洲",,
国家:[
“阿富汗”,
“巴林”
],
},
{
大陆:“非洲”,
国家:[
“阿尔及利亚”,
“安哥拉”
],
},
{
大陆:“美洲”,
国家:[
“安提瓜和巴布达”,
“巴哈马”
],
},
]
const国家=[“安哥拉”、“安道尔”]
const result=countries.map(计数=>{
const obj={country:count};
//从包含国家/地区数组中的“count”的数组continents中获取大陆对象
const contricentobj=大陆.find(大陆=>大陆.countries.includes(count));
//将大陆名称作为大陆obj中的大陆名称添加到obj
obj.大陆=大陆obj.大陆;
返回obj;
})
控制台日志(结果)您可以使用和

因此,这里的想法是通过
大陆
数组进行循环,并过滤countries数组中可用的国家。然后通过匹配国家/地区映射,创建具有所需关键点的对象并推入最终输出

const大陆=[{大陆:'欧洲',国家:['阿尔巴尼亚','安道尔',],},{大陆:'亚洲',国家:['阿富汗','巴林',],},{大陆:'非洲',国家:['阿尔及利亚','安哥拉',],},{大陆:'美洲',国家:['安提瓜和巴布达','巴哈马',],},]
const国家=[“安哥拉”、“安道尔”、“安道尔”、“巴哈马”]
常量输出=大陆。减少((op,cur)=>{
让matchCourty=cur.countries.filter(e=>countries.includes(e))
if(matchCourty&&matchCourty.length){
让desiredObject=matchCourty.map(e=>({
大陆:现在的大陆,
国家:e
}))
op.push(desiredObject)
}
返回操作
},[])

console.log(输出)
首先将大陆数组简化为一个对象,其键为大陆,值为国家数组

let continentObj = continents.reduce((obj,currentObj) => {
obj[currentObj.continent] = currentObj.countries 
return obj
},{})
然后通过运行国家地图获得大陆,并在reduce步骤中创建的对象中找到大陆

 const countryObj = countries.map(country => {
  const continent = Object.keys(continentObj).find(continentName => continentObj[continentName].indexOf(country) > -1)
 return {
  continent,
  country
}
})
console.log(countryObj)

对于多个查找,更有效的方法是创建一个查找对象:

const lookup={},国家=['安哥拉','安道尔'],大陆=[{大陆:'欧洲',国家:['阿尔巴尼亚','安道尔',},{大陆:'亚洲',国家:['阿富汗','巴林',},{大陆:'非洲',国家:['阿尔及利亚','安哥拉',},{大陆:'美洲',国家:['安提瓜和巴布达巴哈马'};
对于(大陆的obj)
对于(对象国家的国家/地区)
查找[国家]=对象大陆;
const result=countries.map(country=>({国家,大陆:查找[country]}));
控制台日志(结果);

console.log(查找)
值得注意的是
返回
内部
。forEach
不做任何事情
.forEach
不返回任何值。