Javascript .join()函数在映射函数中无法正常工作
我正在尝试使用map函数以以下格式遍历对象:Javascript .join()函数在映射函数中无法正常工作,javascript,iteration,Javascript,Iteration,我正在尝试使用map函数以以下格式遍历对象: Name: Hong Kong TopLevelDomain: .hk Alpha2Code: HK Alpha3Code: HKG CallingCodes: 852 Capital: City of Victoria AltSpellings: HK, 香港 Region: Asia Subregion: Eastern Asia Population: 7324300 Latlng: 22.25, 114.16666666 从下面的JavaS
Name: Hong Kong
TopLevelDomain: .hk
Alpha2Code: HK
Alpha3Code: HKG
CallingCodes: 852
Capital: City of Victoria
AltSpellings: HK, 香港
Region: Asia
Subregion: Eastern Asia
Population: 7324300
Latlng: 22.25, 114.16666666
从下面的JavaScript对象:
const object = {
"name": "Hong Kong",
"topLevelDomain": [
".hk"
],
"alpha2Code": "HK",
"alpha3Code": "HKG",
"callingCodes": [
"852"
],
"capital": "City of Victoria",
"altSpellings": [
"HK",
"香港"
],
"region": "Asia",
"subregion": "Eastern Asia",
"population": 7324300,
"latlng": [
22.25,
114.16666666
],
"demonym": "Chinese",
"area": 1104.0,
"gini": 53.3,
"timezones": [
"UTC+08:00"
],
"borders": [
"CHN"
],
"nativeName": "香港",
"numericCode": "344",
"currencies": [
{
"code": "HKD",
"name": "Hong Kong dollar",
"symbol": "$"
}
]
};
我的尝试是:
const object={“name”:“hongkong”,“topLevelDomain”:[“.hk”],“alpha2Code”:“hk”,“alpha3Code”:“hk”,“callingCodes”:[“852”],“capital”:“City of Victoria”,“Alt拼写”:[“hk”香港" ], "区域“:”亚洲“,”次区域“:”东亚“,”人口“:”7324300,“拉丁语“:[22.25114.166666],”人名“:”中国“,”地区“:”1104.0,“基尼“:”53.3,“时区“:[”UTC+08:00“,”边界“:[”中国“,”国家名称“:”香港", "数字代码“:”344“,”货币“:[{”代码“:”港币“,”名称“:”港元“,”符号“$”}];
让显示=[];
让print=Object.keys(Object).map(function(elem){
if(对象[elem]==0 | |对象[elem]==“”){
display=“不适用”;
}else if(对象的类型[elem]='object'){
display=object[elem]。连接(“,”;
}否则{
显示=对象[元素];
}
返回`${elem.charAt(0.toUpperCase()}${elem.slice(1)}:${display}`;
})
console.log(print.join('\n'));
,因为您有嵌套对象。
对象[elem]。join不起作用join是一个数组函数,它只对数组起作用。如下所示
"currencies": [
{
"code": "HKD",
"name": "Hong Kong dollar",
"symbol": "$"
}
]
对于数组,您还需要一个if,并且当存在嵌套对象时,需要使用递归函数
function print(object) {
let objMap= Object.keys(object).map(function(elem){
if(object[elem] == 0 || object[elem] ==""){
display = "N/A";
} else if (object[elem].constructor === Array){
display = object[elem].join(", ") ;
} else if (typeof object[elem] =='object'){
display = print(object[elem]);
} else {
display = object[elem];
}
return `${elem.charAt(0).toUpperCase()}${elem.slice(1)}: ${display}`;
});
console.log(objMap.join('\n'));
}
你的代码运行得很好。所有数组都是javascript中的对象,因此typeof可能没有帮助 .join是一个数组方法,为了确保在有效数组上运行,我将使用array.isArray()而不是使用typeof 如果传入的值是数组,则返回true;如果不是数组,则返回false 在处理嵌套对象/数组时,我同意上面的Shashi
当您必须评估正在使用的数据类型时,一个简单的while循环会起作用。给定您的示例数据,您的代码()应该可以正常工作。提供的数据集只包括数组和字符串。Alana,整个方法看起来是错误的,尽管@vipalpattel是正确的。`object[elem]'引用的是对象上的属性。如果它不是数组,则它将失败。@MauriceMeyer我的预期输出如第一部分所示block@TylerRoper是对的。在Chrome控制台中运行代码可以很好地工作。(注意,
货币
无论如何都不能与给定的代码一起工作。)