javascript - JS数组映射函数,无法读取未定义的属性
问题描述
我有一个复杂的 JS 对象和属性数组。其中一些返回值,但有些返回空值,问题是当我通过列表进行映射时,只要有空值就会导致错误。
我现在无法过滤掉数组,因为我已经在一个循环中,不应该创建另一个过滤数组。我最好的方法是什么?我希望我的循环返回 Array.Group.name[0].text,如果它不存在,则返回 null。
const x = [
{
"id": "1",
"Groups": [
{
"name": [
{
"language": "en-US",
"text": "REGULAR_TIME"
}
],
"isSystem": true
},
{
"name": [
{
"language": "en-US",
"text": "CHARGEABLE"
}
],
"isSystem": true
}
]
},
{
"id": "2",
"Groups": [
{
"name": [
{
"language": "en-US",
"text": "REGULAR_TIME"
}
],
"isSystem": true
},
{
"name": [
{
"language": "en-US",
"text": "CHARGEABLE"
}
],
"isSystem": true
}
]
}
]
x.map(y=>y.Groups.name[0].text)
console.log(x)
解决方案
Groups
也是一个数组,所以你必须使用索引来访问它的成员,比如Groups[0]
. 目前尚不清楚Groups
您想要获得的元素的名称。
大概,你的意思是 x.map(y=>y.Groups[0].name[0].text)
Groups
作为一个数组也是一个对象。所以Groups.name
没有给你任何东西,因为这样的属性不存在。
let x = [
{
"id": "1",
"Groups": [
{
"isSystem": true
},
{
"name": [
{
"language": "en-US",
"text": "CHARGEABLE"
}
],
"isSystem": true
}
]
},
{
"id": "2",
"Groups": [
{
"name": [
{
"language": "en-US",
"text": "REGULAR_TIME"
}
],
"isSystem": true
},
{
"name": [
{
"language": "en-US",
"text": "CHARGEABLE"
}
],
"isSystem": true
}
]
}
];
console.log(x.map(y => y.Groups[0].name?.[0].text));
// or just filter the absent names out before the main routine.
console.log(x.filter(y => y.Groups[0].name).map(y => y.Groups[0].name?.[0].text));
推荐阅读
- javascript - React-native-Redux:找不到存储在连接(组件名称)的上下文或道具中
- mule-studio - Mulesoft 社区版 - 如何使用来自 SOAP Web 服务的响应
- ruby - 当块内的断言失败时,Minitest 报告错误的行号
- c++ - C ++试图删除二叉树并将其移动到Vector
- javascript - 如何从附加在同一商店部分的组件中调度操作
- python - python graphql 将 uuid 转换为 slug
- azure-ad-b2c - Azure B2C 自定义注册页面验证问题
- arrays - Swift 2 从包含字符串的数组中删除对象
- regex - 从文本文件中删除行号
- excel - 同时更改循环VBA的变量