J'ai deux tableaux. L'un a plusieurs champs et le champ Name, un autre n'a que le champ Name. Je souhaite filtrer les éléments du tableau du premier tableau en fonction du deuxième tableau Name. Mon premier tableau

{
    "Failed": 0,
    "Resume": false,
    "Name": "GRP.Compiled.Release"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "GPST.NonPermit.Inacitve"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "PGVF.NonSubmit.Action"
},
{
   "Failed": 0,
   "Resume": false,
   "Name": "PGVF.NonSubmit.Action"
},

J'ai un autre tableau Names uniquement avec le champ Name

{
    "Name": "NonSubmit"
},
{
    "Name": "NonPermit"
},

C'est mon code qui ne fonctionne pas

for (let i = 0; i < Names.length; i++)
{
   //let obj1=products.filter(x=>Names[i].search(/x.Name/g))
   var obj2=products.filter(x=>Names[i].includes(x.Name))
}

La première itération que je recherche ci-dessous la sortie

{
    "Failed": 0,
    "Resume": false,
    "Name": "GPST.NonPermit.Inacitve"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "PGVF.NonSubmit.Action"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "PGVF.NonSubmit.Action"
},

Comment puis je faire ça?

0
R15 30 oct. 2020 à 12:56

2 réponses

Meilleure réponse

En utilisant Array.prototype.some, vous pouvez vérifier si la valeur Name de l'élément arr1 contient l'élément arr2 ou non.

Et sur la base de ce résultat some(), en utilisant Array.prototype.filter, vous pouvez filtrer les arr1 éléments par arr2 éléments.

const arr1 = [{
    "Failed": 0,
    "Resume": false,
    "Name": "GRP.Compiled.Release"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "GPST.NonPermit.Inacitve"
},
{
    "Failed": 0,
    "Resume": false,
    "Name": "PGVF.NonSubmit.Action"
},
{
   "Failed": 0,
   "Resume": false,
   "Name": "PGVF.NonSubmit.Action"
}];

const arr2 = [{
    "Name": "NonSubmit"
}, {
    "Name": "NonPermit"
}];

const output = arr1.filter(({ Name }) => arr2.some((item) => Name.includes(item.Name)));
console.log(output);
3
Derek.W 30 oct. 2020 à 09:59
const array1 = [
  {
    "Failed": 0,
    "Resume": false,
    "Name": "GRP.Compiled.Release"
  },
  {
      "Failed": 0,
      "Resume": false,
      "Name": "GPST.NonPermit.Inacitve"
  },
  {
      "Failed": 0,
      "Resume": false,
      "Name": "PGVF.NonSubmit.Action"
  },
  {
    "Failed": 0,
    "Resume": false,
    "Name": "PGVF.NonSubmit.Action"
  },
];

const array2 = [
  {
    "Name": "NonSubmit"
  },
  {
      "Name": "NonPermit"
  },
]

function solution() {
  return array1.filter((item1) => {
    let flag = false
    array2.forEach(item2 => {
      if (item1.Name.includes(item2.Name)) {
        flag = true
      }
    })
    return flag
  })
}

console.log(solution())
1
Prime 30 oct. 2020 à 10:10