Comparer un tableau d'objet avec un tableau de string

-
Bonjour à tous, je débute en JavaScript et j'ai un problème sur un projet de fin d'études que je développe sur le framework vue js.

Mon problème est le suivant, mon premier tableau de string contient quelque chose comme cela.

[code]
var tab1 = ['METIER PROD WEB METIER PROD WEB','METIER PROD WEB METIER QUAL DATA','METIER PROD WEB METIER QUAL WEB', etc...]
[/code]

Mon deuxième tableau quant à lui est un tableau d'objet, avec un contenu tel que celui-ci

[code]
var tab2 = [
{
Id: 7523,
Source: {
NetworkDomain: 'METIER',
Environment: 'PROD',
Area: 'WEB',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'PROD',
Area: 'WEB',
},
SecurityCheck: 'Déviation',
},
{
Id: 7524,
Source: {
NetworkDomain: 'METIER',
Environment: 'QUAL',
Area: 'DATA',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'QUAL',
Area: 'DATA',
},
SecurityCheck: 'Déviation',
},
{
Id: 7525,
Source: {
NetworkDomain: 'METIER',
Environment: 'QUAL',
Area: 'WEB',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'QUAL',
Area: 'WEB',
},
SecurityCheck: 'OK',
},
{
Id: 7526,
Source: {
NetworkDomain: 'METIER',
Environment: 'INT',
Area: 'AGORA',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'INT',
Area: 'AGORA',
},
SecurityCheck: 'Impossible',
},
]
[/code]

Le but pour moi et de comparer c'est deux tableau je vous explique étape par étape le résultat voulu.
[list=] Tout d'abord il faut savoir que les trois premier mots de chaque case du tableau de String par exemple METIER PROD WEB représentent les [b]sources[/b] d'un objet (NetworkDomain,Environment,Area) du tableau d'objet, ainsi vous l'aurai deviné les 3 autres mot du tableau de String représente les destinations d'un objet (NetworkDomain,Environment,Area) [/list]
[list=]Le but étant pour moi de comparer les données du tab1 avec les sources et destinations du tab2 (NetworkDomain,Environment,Area), puis d'afficher le [color=#FF0000]SecurityCheck[/color] de l'objet si les données match entres elles sinon, afficher SecurityCheck Non-défini.[/list]
[list=]Petit exemple : Si on prend la case0 du tab1 elle est égal à 'METIER PROD WEB METIER PROD WEB' donc si on regarde dans tab2 si un objet et similiare il y'a effectivement l'objet 1 donc on affiche SecurityChcek = Déviation.
Si on prend la case 1 du tab1 'METIER PROD WEB METIER QUAL DATA' aucun objet n'est correspondant donc on affiche SecurityCheck = Non-défini
[/list]

Pour aller plus loin il serai très bon pour moi d'avoir en fait toutes c'est données stockées dans un nouveau tableau d'objet de ce type.
[code]
var tab2 = [
{
Source: {
NetworkDomain: 'METIER',
Environment: 'PROD',
Area: 'WEB',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'PROD',
Area: 'WEB',
},
SecurityCheck: 'Déviation',
},
{
Id: 7524,
Source: {
NetworkDomain: 'METIER',
Environment: 'PROD',
Area: 'WEB',
},
Destination: {
NetworkDomain: 'METIER',
Environment: 'QUAL',
Area: 'DATA',
},
SecurityCheck: 'Non-défini',
}
]
[/code]

Je vous suis d'avance très reconnaissant pour votre aide.
Afficher la suite 

1 réponse

Messages postés
3446
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
8 août 2019
912
0
Merci
Bonjour,

Le plus simple à mon avis, c'est de coder une fonction qui transforme un élément du tableau 2 en une chaîne du tableau 1. Avec cette fonction, tu crées un nouveau champ sur chaque élément de ton tableau 2 qui stocke cette valeur (pour des raisons de perf, et ne pas avoir à la recalculer à chaque fois).

Ensuite, tu parcours ton tableau 1, et pour chaque élément tu regardes si le tableau 2 contient un objet qui correspond. Si oui, très bien, sinon, tu crées un nouvel objet. Il faut le remplir avec les données de la chaîne, pour ça, tu dois faire une fonction qui fasse l'inverse de celle de tout à l'heure : prendre une chaîne et en sortir un objet structuré.
En supposant que le format de la chaîne de caractère est toujours le même (exactement 6 mots, dans un ordre fixe), tu t'en sortiras simplement avec la fonction string.split (https://www.w3schools.com/jsref/jsref_split.asp)

Bonne chance,

Xavier
Commenter la réponse de Reivax962