javascript - 使用具有多个值的第二个数组过滤对象数组
问题描述
我正在尝试编写一个函数来获取“父”数组中的第一个对象,拉出子字段(在该数组中)并使用该字段过滤称为“子”的第二个对象。
我想从父对象的子字段中的子对象中获取所有相关记录。
预期产出
child: [
{
**id: 1,**
name: 'Jimmy Yukka',
},
{
**id: 2,**
name: 'Up North',
}
输入
Parent: [
{
**id: 1,**
name: 'Melbourne Bands',
**child: [1, 2]**
}
我有以下数据
Parent: [
{
**id: 1,**
name: 'Melbourne Bands',
**child: [1, 2]**
},
{
id: 2,
name: 'Sydney Bands',
child: [3]
}
],
child: [
{
**id: 1,**
name: 'Jimmy Yukka',
},
{
**id: 2,**
name: 'Up North',
},
{
id: 3,
url: 'jimmyyukka.com',
name: 'INXS',
CreatedByUserId: 1
}
],
到目前为止我已经实现的函数代码:
currentChildrenIds(ParentId, parentData, childData) {
const singleParentRecord = parentData.filter(function(parent) {
return parent.id === ParentId;
});
const parentsChildIds = singleParentRecord[0].books;
const childRecords = childData.filter(function(child) {
return child.id === parentsChildIds
});
return childRecords
}
注意 这里的这一点是错误的
const childRecords = childData.filter(function(child) {
return child.id === parentsChildIds
这一点也有点垃圾(硬编码[0])但不是我不确定我应该如何正确编码
const parentsChildIds = singleParentRecord[0].books;
解决方案
这里,
const childRecords = childData.filter(function(child) {
return child.id === parentsChildIds
parentsChildIds 是对数组的引用:您不想测试 id 是否 === 对 aa 引用,
您必须明确并检查 id 是否包含在数组中:
const childRecords = childData.filter(function(child) {
return parentsChildIds.includes(child.id)
关于感觉很奇怪的singleParentRecord[0],因为你知道方法filter总是会返回一个大小为1或0的数组,你可以使用方法find代替filter
同样在函数式编程(数组函数,如过滤器、映射、查找...)中,我建议您阅读一些有关箭头函数语法的内容,因为:
- 语法更密集,它使您的大脑更容易理解何时链接多个功能
- 如果您想使用在函数外部定义的变量,它将仅在箭头函数内部可用
您的代码带有箭头功能:
const childRecords = childData.filter((child) => {
return child.id === parentsChildIds
}
推荐阅读
- javascript - 不显示
使用结构指令时 - python - 优化在长字符串列表中的搜索
- python - 使用 Python 检测对嵌套字典的更改
- javascript - “{...} 不是函数”虽然从未作为函数调用
- reactjs - React:向根 DOM 添加模态组件
- android - 使用 react-native-ble-plx 避免重复的 BLE 设备
- tensorflow - 使用 YOLO 对图像的不同 DPI 进行目标检测
- ios - 什么时候选择 tableviewcell 滚动 collectionviewcell
- javascript - 如何使用动态数据强制选择 html 标记中的选定值
- mysql - 如何在 mysql 中删除匹配条目数低于特定数字的结果