Javascript .join()函数在映射函数中无法正常工作

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

我正在尝试使用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
从下面的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控制台中运行代码可以很好地工作。(注意,
货币
无论如何都不能与给定的代码一起工作。)