Not sure, if this is what the op wanted, but I would solve this like this (without loop and variable):
Use a Select action with From: Array1
- to store the original item
- and calculate if Array2 contains the part of the Array1 item that is comparable
- then Filter this calculation
- and restore the oringinal structure of the filtered array

Select expressions:
Item:
item()
Contains:
contains(
outputs('Array2'),
json(
concat(
'{"Col1": "',
item()['Col1'],
'"}'
)
)
)
If the json(concat('{"Col1": "',item()['Col1'],'"})) part becomes too large in reality, add it to Array1 in advance with a Select action
Select 2 expression:
item()['Item']