javascript - 地图和过滤器的组合不能按预期工作
问题描述
我有一个这样的对象。feature_id
如果值存在于我已经拥有的数组中,我需要删除特征数组中的元素。
[
{
"name": "Display",
"data": {
"id": 34566,
"category_id": 2647,
"feature_group_id": 5
},
"features": [
{
"name": "Tipo di display",
"data": {
"id": 85325,
"category_id": 2647,
"feature_id": 9104,
"category_feature_group_id": 34566,
"order": 10100140
}
},
{
"name": "Risoluzione del display",
"data": {
"id": 85332,
"category_id": 2647,
"feature_id": 1585,
"category_feature_group_id": 34566,
"order": 10100130
}
},
{
"name": "Touch screen",
"data": {
"id": 85331,
"category_id": 2647,
"feature_id": 4963,
"category_feature_group_id": 34566,
"order": 10100129
}
},
{
"name": "Tipo di vetro",
"data": {
"id": 94704,
"category_id": 2647,
"feature_id": 7610,
"category_feature_group_id": 34566,
"order": 100050
}
}
]
},
{
"name": "Design",
"data": {
"id": 16293,
"category_id": 2647,
"feature_group_id": 148
},
"features": [
{
"name": "Colore struttura",
"data": {
"id": 85298,
"category_id": 2647,
"feature_id": 10059,
"category_feature_group_id": 16293,
"order": 10100090
}
},
{
"name": "Materiale della scocca",
"data": {
"id": 85300,
"category_id": 2647,
"feature_id": 5214,
"category_feature_group_id": 16293,
"order": 10100089
}
},
{
"name": "Colore cinturino",
"data": {
"id": 85301,
"category_id": 2647,
"feature_id": 11025,
"category_feature_group_id": 16293,
"order": 10100080
}
},
{
"name": "Materiale cinturino",
"data": {
"id": 94551,
"category_id": 2647,
"feature_id": 7605,
"category_feature_group_id": 16293,
"order": 100160
}
}
]
}
]
我写这个,featureIds
我的数组在哪里,结构是对象
structure.map((object) => {
object.features.filter(feature => {
this.featureIds.includes(feature.data.id)
})
})
结果,我仍然有很多 ID 不在我的数组中的功能。错误在哪里?
解决方案
有几个问题。主要的是filter
返回应用了过滤器的新数组,它不会更改您调用它的数组。您没有将那个新数组用于任何事情。另一个是map
做同样的事情,它返回一个带有映射值的新数组,它不会修改你调用它的数组。
如果要过滤features
数组中所有对象的数组,您有几个选项,但都涉及使用过滤/映射数组的事物的返回值:
更新到位的对象
for (const object of structure) { object.features = object.features.filter(feature => this.featureIds.includes(feature.data.id)); }
创建新对象和新数组:
structure = structure.map(object => ({ ...object, features: object.features.filter(feature => this.featureIds.includes(feature.data.id)) }));
推荐阅读
- deep-learning - ValueError:层顺序的输入0与层不兼容:输入形状的预期轴-1
- firebase - 如何减少每天颤动的云火石读取?
- angular - Angular 10 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗?
- c++ - OpenSSL RSA_sign C++ - 不同于命令行的符号
- linux - Linux/nix:使用 pr 格式化文本 - 如何添加换行符?
- python - 在字符串中查找空格,然后在python中拆分为数字和文本到单独的列中
- html - 使用 CSS 将提交按钮保持在父表单内
- javascript - Javascript 的优先级是否高于 CSS?
- javascript - 如何等待带有承诺的未定义回调循环?
- php - 如何在独特的属性laravel中添加多个条件?