我需要在javascript中扁平化对象值。ent是输入数组。该语言的第一个对象由数组值数组组成,我需要将对象值展平。[ {},{},{}]
专家取值为language:{},{},{};
const ent =[{
"name": "Afghanistan",
"topLevelDomain": [
".af"
],
"alpha2Code": "AF",
"alpha3Code": "AFG",
"callingCodes": [
"93"
],
"capital": "Kabul",
"altSpellings": [
"AF",
"Afġānistān"
],
"region": "Asia",
"subregion": "Southern Asia",
"population": 27657145,
"latlng": [
33,
65
],
"demonym": "Afghan",
"area": 652230,
"gini": 27.8,
"timezones": [
"UTC+04:30"
],
"borders": [
"IRN",
"PAK",
"TKM",
"UZB",
"TJK",
"CHN"
],
"nativeName": "افغانستان",
"numericCode": "004",
"currencies": [
{
"code": "AFN",
"name": "Afghan afghani",
"symbol": "؋"
}
],
"languages": [
[{
"iso639_1": "ps",
"iso639_2": "pus",
"name": "Pashto",
"nativeName": "پښتو"
}],
[{
"iso639_1": "uz",
"iso639_2": "uzb",
"name": "Uzbek",
"nativeName": "Oʻzbek"
}],
[{
"iso639_1": "tk",
"iso639_2": "tuk",
"name": "Turkmen",
"nativeName": "Türkmen"
}],
],
"translations": {
"de": "Afghanistan",
"es": "Afganistán",
"fr": "Afghanistan",
"ja": "アフガニスタン",
"it": "Afghanistan",
"br": "Afeganistão",
"pt": "Afeganistão",
"nl": "Afghanistan",
"hr": "Afganistan",
"fa": "افغانستان"
},
"flag": "https://restcountries.eu/data/afg.svg",
"regionalBlocs": [
{
"acronym": "SAARC",
"name": "South Asian Association for Regional Cooperation",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "AFG"
},
{
"name": "Åland Islands",
"topLevelDomain": [
".ax"
],
"alpha2Code": "AX",
"alpha3Code": "ALA",
"callingCodes": [
"358"
],
"capital": "Mariehamn",
"altSpellings": [
"AX",
"Aaland",
"Aland",
"Ahvenanmaa"
],
"region": "Europe",
"subregion": "Northern Europe",
"population": 28875,
"latlng": [
60.116667,
19.9
],
"demonym": "Ålandish",
"area": 1580,
"gini": null,
"timezones": [
"UTC+02:00"
],
"borders": [],
"nativeName": "Åland",
"numericCode": "248",
"currencies": [
{
"code": "EUR",
"name": "Euro",
"symbol": "€"
}
],
"languages": [
{
"iso639_1": "sv",
"iso639_2": "swe",
"name": "Swedish",
"nativeName": "svenska"
}
],
"translations": {
"de": "Åland",
"es": "Alandia",
"fr": "Åland",
"ja": "オーランド諸島",
"it": "Isole Aland",
"br": "Ilhas de Aland",
"pt": "Ilhas de Aland",
"nl": "Ålandeilanden",
"hr": "Ålandski otoci",
"fa": "جزایر الند"
},
"flag": "https://restcountries.eu/data/ala.svg",
"regionalBlocs": [
{
"acronym": "EU",
"name": "European Union",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": ""
},
{
"name": "Albania",
"topLevelDomain": [
".al"
],
"alpha2Code": "AL",
"alpha3Code": "ALB",
"callingCodes": [
"355"
],
"capital": "Tirana",
"altSpellings": [
"AL",
"Shqipëri",
"Shqipëria",
"Shqipnia"
],
"region": "Europe",
"subregion": "Southern Europe",
"population": 2886026,
"latlng": [
41,
20
],
"demonym": "Albanian",
"area": 28748,
"gini": 34.5,
"timezones": [
"UTC+01:00"
],
"borders": [
"MNE",
"GRC",
"MKD",
"KOS"
],
"nativeName": "Shqipëria",
"numericCode": "008",
"currencies": [
{
"code": "ALL",
"name": "Albanian lek",
"symbol": "L"
}
],
"languages": [
{
"iso639_1": "sq",
"iso639_2": "sqi",
"name": "Albanian",
"nativeName": "Shqip"
}
],
"translations": {
"de": "Albanien",
"es": "Albania",
"fr": "Albanie",
"ja": "アルバニア",
"it": "Albania",
"br": "Albânia",
"pt": "Albânia",
"nl": "Albanië",
"hr": "Albanija",
"fa": "آلبانی"
},
"flag": "https://restcountries.eu/data/alb.svg",
"regionalBlocs": [
{
"acronym": "CEFTA",
"name": "Central European Free Trade Agreement",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "ALB"
},
];
const outputKeys = ['name', 'capital', 'region', 'languages', 'flag'];
const output = ent.map(item =>
outputKeys.reduce((val, key) => ({ ...val, [key]: item[key] }), {})
);
console.log(output);
输出是具有选定键值的数组,返回值是,但我需要扁平对象的值
const output = [
{
name: 'Afghanistan',
capital: 'Kabul',
region: 'Asia',
languages: [
[{
iso639_1: 'ps',
iso639_2: 'pus',
name: 'Pashto',
nativeName: 'پښتو'
}],
[{
iso639_1: 'uz',
iso639_2: 'uzb',
name: 'Uzbek',
nativeName: 'Oʻzbek'
}],
[{
iso639_1: 'tk',
iso639_2: 'tuk',
name: 'Turkmen',
nativeName: 'Türkmen'
}]
],
flag: 'https://restcountries.eu/data/afg.svg'
},
{
name: 'Åland Islands',
capital: 'Mariehamn',
region: 'Europe',
languages: [
{
iso639_1: 'sv',
iso639_2: 'swe',
name: 'Swedish',
nativeName: 'svenska'
}
],
flag: 'https://restcountries.eu/data/ala.svg'
},
{
name: 'Albania',
capital: 'Tirana',
region: 'Europe',
languages: [
{
iso639_1: 'sq',
iso639_2: 'sqi',
name: 'Albanian',
nativeName: 'Shqip'
}
],
flag: 'https://restcountries.eu/data/alb.svg'
}
];
我需要展平对象的值。[ {},{},{}]
专家取值为language:{},{},{};
我试着这样做:
const outputKeys =‘名称’,‘大写’,‘地区’,‘语言’,‘标志’;
const输出= ent.map(item => outputKeys.reduce((val,key) => ({ ...val,key: itemkey.flat(infinity) }),{}) );console.log(输出);
注意第一个对象,语言由嵌套数组组成!提前谢谢。
发布于 2020-12-25 21:27:05
您可以使用析构来仅选择特定的属性,然后仅.flat语言数组。
const ent =[{
"name": "Afghanistan",
"topLevelDomain": [
".af"
],
"alpha2Code": "AF",
"alpha3Code": "AFG",
"callingCodes": [
"93"
],
"capital": "Kabul",
"altSpellings": [
"AF",
"Afġānistān"
],
"region": "Asia",
"subregion": "Southern Asia",
"population": 27657145,
"latlng": [
33,
65
],
"demonym": "Afghan",
"area": 652230,
"gini": 27.8,
"timezones": [
"UTC+04:30"
],
"borders": [
"IRN",
"PAK",
"TKM",
"UZB",
"TJK",
"CHN"
],
"nativeName": "افغانستان",
"numericCode": "004",
"currencies": [
{
"code": "AFN",
"name": "Afghan afghani",
"symbol": "؋"
}
],
"languages": [
[{
"iso639_1": "ps",
"iso639_2": "pus",
"name": "Pashto",
"nativeName": "پښتو"
}],
[{
"iso639_1": "uz",
"iso639_2": "uzb",
"name": "Uzbek",
"nativeName": "Oʻzbek"
}],
[{
"iso639_1": "tk",
"iso639_2": "tuk",
"name": "Turkmen",
"nativeName": "Türkmen"
}],
],
"translations": {
"de": "Afghanistan",
"es": "Afganistán",
"fr": "Afghanistan",
"ja": "アフガニスタン",
"it": "Afghanistan",
"br": "Afeganistão",
"pt": "Afeganistão",
"nl": "Afghanistan",
"hr": "Afganistan",
"fa": "افغانستان"
},
"flag": "https://restcountries.eu/data/afg.svg",
"regionalBlocs": [
{
"acronym": "SAARC",
"name": "South Asian Association for Regional Cooperation",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "AFG"
},
{
"name": "Åland Islands",
"topLevelDomain": [
".ax"
],
"alpha2Code": "AX",
"alpha3Code": "ALA",
"callingCodes": [
"358"
],
"capital": "Mariehamn",
"altSpellings": [
"AX",
"Aaland",
"Aland",
"Ahvenanmaa"
],
"region": "Europe",
"subregion": "Northern Europe",
"population": 28875,
"latlng": [
60.116667,
19.9
],
"demonym": "Ålandish",
"area": 1580,
"gini": null,
"timezones": [
"UTC+02:00"
],
"borders": [],
"nativeName": "Åland",
"numericCode": "248",
"currencies": [
{
"code": "EUR",
"name": "Euro",
"symbol": "€"
}
],
"languages": [
{
"iso639_1": "sv",
"iso639_2": "swe",
"name": "Swedish",
"nativeName": "svenska"
}
],
"translations": {
"de": "Åland",
"es": "Alandia",
"fr": "Åland",
"ja": "オーランド諸島",
"it": "Isole Aland",
"br": "Ilhas de Aland",
"pt": "Ilhas de Aland",
"nl": "Ålandeilanden",
"hr": "Ålandski otoci",
"fa": "جزایر الند"
},
"flag": "https://restcountries.eu/data/ala.svg",
"regionalBlocs": [
{
"acronym": "EU",
"name": "European Union",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": ""
},
{
"name": "Albania",
"topLevelDomain": [
".al"
],
"alpha2Code": "AL",
"alpha3Code": "ALB",
"callingCodes": [
"355"
],
"capital": "Tirana",
"altSpellings": [
"AL",
"Shqipëri",
"Shqipëria",
"Shqipnia"
],
"region": "Europe",
"subregion": "Southern Europe",
"population": 2886026,
"latlng": [
41,
20
],
"demonym": "Albanian",
"area": 28748,
"gini": 34.5,
"timezones": [
"UTC+01:00"
],
"borders": [
"MNE",
"GRC",
"MKD",
"KOS"
],
"nativeName": "Shqipëria",
"numericCode": "008",
"currencies": [
{
"code": "ALL",
"name": "Albanian lek",
"symbol": "L"
}
],
"languages": [
{
"iso639_1": "sq",
"iso639_2": "sqi",
"name": "Albanian",
"nativeName": "Shqip"
}
],
"translations": {
"de": "Albanien",
"es": "Albania",
"fr": "Albanie",
"ja": "アルバニア",
"it": "Albania",
"br": "Albânia",
"pt": "Albânia",
"nl": "Albanië",
"hr": "Albanija",
"fa": "آلبانی"
},
"flag": "https://restcountries.eu/data/alb.svg",
"regionalBlocs": [
{
"acronym": "CEFTA",
"name": "Central European Free Trade Agreement",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "ALB"
},
];
const output = ent.map(({name, capital, region, languages, flag}) => ({
name,
capital,
region,
languages: languages.flat(),
flag
}));
console.log(output);
https://stackoverflow.com/questions/65448334
复制相似问题