javascript - 如何从数组中获取匹配的元素?

标签 javascript arrays object ecmascript-6

试图获得低于预期的结果,但它没有进入specialtyMembers的for循环,知道如何获得与两个数组匹配的预期响应,有任何使用过滤器的方法吗?

main.js

const members = [{
    "indexId": "1",
    "planId": "8304TDMACC001"
}]

const specialtyMembers = [{
        "proxyId": "",
        "internalID": "38482099",
        "externalID": "",
        "indexID": "1",
        "gender": "Male"
    },
    {
        "proxyId": "",
        "internalID": "38482100",
        "externalID": "",
        "indexID": "2",
        "gender": "Female"
    }
]

if (members) {
    const membersArray: any = [];
    for (const member of members) {
        if (specialtyMembers) {
            for (const cacheMember of specialtyMembers) {
                if (member.indexId === cacheMember.indexID) {
                    membersArray.push(cacheMember);
                }
            }
        }
    }
    specialtyMembers = membersArray;
}

预期输出,因为indexId仅与此匹配

 [{
        "proxyId": "",
        "internalID": "38482099",
        "externalID": "",
        "indexID": "1",
        "gender": "Male"
    }
]

最佳答案

只需通过 specialtyMembers 数组进行过滤,如下所示:

specialtyMembers = specialtyMembers.filter(e => members[0].indexId == e.indexID);

注意:您必须将 specialtyMembers 从常量更改为变量。为此,请将此行中的 const 更改为 var:

var specialtyMembers = [{...}, {...}];

演示:

const members = [{
  "indexId": "1",
  "planId": "8304TDMACC001"
}];

var specialtyMembers = [{
    "proxyId": "",
    "internalID": "38482099",
    "externalID": "",
    "indexID": "1",
    "gender": "Male"
  },
  {
    "proxyId": "",
    "internalID": "38482100",
    "externalID": "",
    "indexID": "2",
    "gender": "Female"
  }
];

specialtyMembers = specialtyMembers.filter(e => members[0].indexId == e.indexID);

console.log(specialtyMembers);

编辑:

如果 members 中有多个元素,您只需创建一个 indexId 数组,如下所示:

var indexIds = members.map(e => e.indexId);

然后将 filter 语句更改为:

specialtyMembers = specialtyMembers.filter(e => indexIds.includes(e.indexID));

演示:

const members = [{
  "indexId": "1",
  "planId": "8304TDMACC001"
}];

var specialtyMembers = [{
    "proxyId": "",
    "internalID": "38482099",
    "externalID": "",
    "indexID": "1",
    "gender": "Male"
  },
  {
    "proxyId": "",
    "internalID": "38482100",
    "externalID": "",
    "indexID": "2",
    "gender": "Female"
  }
];

var indexIds = members.map(e => e.indexId);

specialtyMembers = specialtyMembers.filter(e => indexIds.includes(e.indexID));

console.log(specialtyMembers);

关于javascript - 如何从数组中获取匹配的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54226027/

相关文章:

javascript - 垂直翻转 Raphael SVG 形状

javascript - 如何使用javascript控制Windows录音机

c++ - 复数 double 组的最大大小是多少?

JavaScript:从 DOM 创建对象

arrays - 比较一个对象看它是否是一个集合而不使用 TypeName 并将其作为字符串进行比较?

Javascript 适用于 Chrome、Safari 和 Opera,但不适用于 Firefox

c - 在 C 中使用 fgetc() 读入数组

c - 如何正确使用数组下标表示法?

facebook - 您能否获取开放图对象实例(例如 "Blowing in the Wind"与歌曲)的 Facebook Insights?

javascript - 使用 google api 登录我的网站