-1

I need to compare two arrays and when records match then save mached record to another array

Array1 =

[ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 11, "value": "[PACKTYPE]" }, { "phId": 12, "value": "[BALANCE]" }, { "phId": 17, "value": "[DURATION]" } ] 

Array2 =

[ "[PACKNAME]", "[BALANCE]" ]


Matched Record Saved Array
[ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 12, "value": "[BALANCE]" } ]

How can I achive this approch using javascript.

I could do matching and save array for same kind of arrays using below code but I'm unable to do above scenario.

let firstArray = ["One", "Two", "Three", "Four", "Five"];
let secondArray = ["Three", "Four"];

let map = {};
firstArray.forEach(i => map[i] = false);
secondArray.forEach(i => map[i] === false && (map[i] = true));
let jsonArray = Object.keys(map).map(k => ({ name: k, matched: map[k] }))
Sven.hig
  • 4,449
  • 2
  • 8
  • 18
HashanR
  • 194
  • 3
  • 18

5 Answers5

0

This is a simple filter usecase:

let array1 = [ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 11, "value": "[PACKTYPE]" }, { "phId": 12, "value": "[BALANCE]" }, { "phId": 17, "value": "[DURATION]" } ];

let array2 = [ "[PACKNAME]", "[BALANCE]" ];

let array3 = array1.filter((el) => array2.includes(el.value));

console.log(array3);

More about Array.prototype.filter()

Greedo
  • 3,438
  • 1
  • 13
  • 28
0

You don't want all items = you don't want map.
You want some items that match a condition = you want filter.

try this:

var Array1 = [
  {"phId": 10, "value": "[PACKNAME]"},
  {"phId": 11, "value": "[PACKTYPE]"},
  {"phId": 12, "value": "[BALANCE]"},
  {"phId": 17, "value": "[DURATION]"}
];
var Array2 = ["[PACKNAME]", "[BALANCE]"];

var MatchedRecordSavedArray = Array1.filter(item => Array2.includes(item.value));

console.log(MatchedRecordSavedArray);
iAmOren
  • 2,760
  • 2
  • 11
  • 23
0

If I understand correctly what you are trying to do: you can just filter the first array for elements whose value exists in the second array, as follows:

const firstArray = [
  { "phId": 10, "value": "[PACKNAME]" },
  { "phId": 11, "value": "[PACKTYPE]" },
  { "phId": 12, "value": "[BALANCE]" },
  { "phId": 17, "value": "[DURATION]" }
] 

const secondArray = [ "[PACKNAME]", "[BALANCE]" ]

const matchedArray = firstArray.filter(({ value }) => secondArray.includes(value))
CherryDT
  • 25,571
  • 5
  • 49
  • 74
0

Use filter

const arr_one = [ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 11, "value": "[PACKTYPE]" }, { "phId": 12, "value": "[BALANCE]" }, { "phId": 17, "value": "[DURATION]" } ] 

const arr_two = [ "[PACKNAME]", "[BALANCE]" ]

const matched = arr_one.filter( ( item ) => arr_two.includes( item.value )  )

console.log(matched)

/*
Matched Record Saved Array
[ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 12, "value": "[BALANCE]" } ]
*/
Getter Jetter
  • 2,033
  • 1
  • 16
  • 37
0

array1=[ { "phId": 10, "value": "[PACKNAME]" }, { "phId": 11, "value": "[PACKTYPE]" }, { "phId": 12, "value": "[BALANCE]" }, { "phId": 17, "value": "[DURATION]" } ] 
array2=[ "[PACKNAME]", "[BALANCE]" ]

res = array1.filter(o => array2.includes(o.value))
console.log(res)
Sven.hig
  • 4,449
  • 2
  • 8
  • 18