如何使用map()从JSON数组中选择相邻值



我有一些JSON,如下所示。。。

var JSONobj =     {
"headline":{
"localized":{
"en_US":"Doctor"
},
"preferredLocale":{
"country":"US",
"language":"en"
}
},
"identities":[
{
"access_token":"AQVUTBfbOs5JLsdfsdfH_W1aZ2N0PrbL0LhD5Y5-g",
"provider":"linkedin",
"user_id":"v57678565vf",
"connection":"linkedin",
"isSocial":true
},
{
"access_token":"AQVUTBsdfsdfsdfsdfwePrbL0LhD5Y5-g",
"provider":"facebook",
"user_id":"hshs8722",
"connection":"facebook",
"isSocial":true
}
],
"name":"John Bob"
};

使用JavaScript,我需要浏览";身份";数组,找到带有"的项;"连接";"的值;facebook";,并返回相关联的";access_token";价值

注意:这个例子在";身份";数组,但在生产中会有动态数量的项目。有时多,有时少。

我一直在尝试使用map(),如下所示,但我无法解决。

var access_token = JSONobj.identities.map(i=>i.connection);

console.log(access_token);

您可以使用Array.find来查找identitiesconnection为"的第一个对象;facebook";,然后从该对象提取CCD_ 5:

var JSONobj = {
"headline": {
"localized": {
"en_US": "Doctor"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"identities": [{
"access_token": "AQVUTBfbOs5JLsdfsdfH_W1aZ2N0PrbL0LhD5Y5-g",
"provider": "linkedin",
"user_id": "v57678565vf",
"connection": "linkedin",
"isSocial": true
},
{
"access_token": "AQVUTBsdfsdfsdfsdfwePrbL0LhD5Y5-g",
"provider": "facebook",
"user_id": "hshs8722",
"connection": "facebook",
"isSocial": true
}
],
"name": "John Bob"
};
var access_token = JSONobj.identities.find(o => o.connection == 'facebook').access_token;
console.log(access_token);

注意(如@secan所指出的),如果可能不存在与CCD_;facebook";,使用更安全:

(JSONobj.identities.find(i=>i.connection === 'facebook')||{}).access_token;

因为这将返回CCD_ 7而不是引发错误。

在这种情况下的另一种选择(正如@pilchard所指出的)是使用可选的链接(尽管这需要一个相当新的浏览器来支持):

JSONobj.identities.find(i=>i.connection === 'Facebook')?.access_token;

创建一个generala函数,该函数接受标识数组和所需的连接名称,您可以使用Array.find浏览连接数组项

function getAccessToken(identitiesArr, connection) {
let identity = identitiesArr.find(e => e.connection == connection);
if (identity)
return identity.access_token;
return '';
}

var JSONobj = {
"headline": {
"localized": {
"en_US": "Doctor"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"identities": [{
"access_token": "AQVUTBfbOs5JLsdfsdfH_W1aZ2N0PrbL0LhD5Y5-g",
"provider": "linkedin",
"user_id": "v57678565vf",
"connection": "linkedin",
"isSocial": true
},
{
"access_token": "AQVUTBsdfsdfsdfsdfwePrbL0LhD5Y5-g",
"provider": "facebook",
"user_id": "hshs8722",
"connection": "facebook",
"isSocial": true
}
],
"name": "John Bob"
};
let token = getAccessToken(JSONobj.identities, "facebook");
console.log(token);

最新更新