I have a map object with key value pair as shown below
const input = new Map([
[
0,
{
testErrorSummary: "ServiceC\nV4/\n\tcom.dmv.smp",
appErrorSummary: '{"handler":null,"sourcetype":null}',
invocations: [
{ radar: "", testCaseMilestone: "1G05" },
{ radar: "3450", testCaseMilestone: "1G15" },
],
},
],
[
1,
{
testErrorSummary: 'java: \nEx:\n <"()">\n <" "code": "403"">',
appErrorSummary: '{"handler":null,"sourcetype":null}',
invocations: [
{ radar: "1532", testCaseMilestone: "1G12" },
{ radar: "1954", testCaseMilestone: "1G24" },
],
},
],
[
2,
{
testErrorSummary: "com.dmv: Timeout while waiting.",
appErrorSummaryKeyword: 'Cannot invoke "com.dmv.getEcid()"',
hasRadarHistory: false,
invocations: [
{ radar: "3444", testCaseMilestone: "1G45" },
{ radar: "", testCaseMilestone: "1G90" },
],
},
],
]);
I have a search input where i enter the string. Based on this string value, i want to filter this above map object. Suppose user enters "50". So i need to check for properties testErrorSummary
, appErrorSummary
and radar
and return only those mapped objects which matches with user entries.
So in this case, user enters 50, i am expecting the below result because those get matched with radar
having 50 in it. So filterFailureInput = 50
Expected output
new Map([
[
0,
{
testErrorSummary: "ServiceC\nV4/\n\tcom.dmv.smp",
appErrorSummary: '{"handler":null,"sourcetype":null}',
invocations: [
{ radar: "", testCaseMilestone: "1G05" },
{ radar: "3450", testCaseMilestone: "1G15" },
],
},
],
]);
In order to achieve this way of filtering, i am doing the following but i dont get the expected filter results. Can someone let me know where i am going wrong with this.
const searchException = () => {
return new Map(
Array.from(input).filter(([key, value]) => {
const matchInvocations = value.invocations.some(
(invocation) => {
(invocation?.radar &&
invocation?.radar.includes(filterFailureInput)) ||
(value?.testErrorSummary?.toLowerCase()
.includes(filterFailureInput.toLowerCase())) ||
(value?.appErrorSummaryKeyword?.toLowerCase()
.includes(filterFailureInput.toLowerCase()))
});
return matchInvocations;
})
);
};
const expectedOutput = searchException();
Your filtering function looks mostly correct, but there're some issues.
Here's updated code.
const searchException = () => {
return new Map(
Array.from(input).filter(([key, value]) => {
const matchInvocations = value.invocations.some((invocation) =>
invocation?.radar?.includes(filterFailureInput)
);
const matchErrorSummary =
value?.testErrorSummary?.toLowerCase().includes(filterFailureInput.toLowerCase()) ||
value?.appErrorSummaryKeyword?.toLowerCase()?.includes(filterFailureInput.toLowerCase());
return matchInvocations || matchErrorSummary;
})
);
};