Array.indexOf sur des tableaux (ou includes(xx))

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
Jpe54
Messages : 60
Enregistré le : 10 mars 2017, 14:11

Array.indexOf sur des tableaux (ou includes(xx))

Message par Jpe54 » 29 sept. 2021, 18:15

Bonjour,

Je bataille pour extraire d'un tableau A multi éléments ceux qui n'ont pas lieu être car valeur absente dans le tableau B.

Concrétement le résultat attendu en console.log est la ligne contenant ["12ras", "toto", "tata"] dont le premier élément du TabA ( 12ras) ne figure pas dans le tableau TabB.

Test fait avec includes() en prenant soin de trasnformer le contenu de TabB en String sans plus de résultat...

Les 2 tableaux peuvent avoir un nombre d'élément variable, en particulier TabB peut avoir au maximum 10 valeurs, donc l'opération de comparaion OU n'est pas adaptée.

Comment procéder ?

Merci par avance !

Code : Tout sélectionner

var TabA = [
["122536", "toto", "tata"],["252526", "toto", "tata"],["122263", "toto", "tata"],["12ras", "toto", "tata"]
];

var TabB = [
[122536],[122263],[252526]
];

// for (var n = 0; n < TabB.length; n++) {
    for (var i = 0; i < TabA.length; i++) {
    // Si TabB absent dans TabA
        if (TabA[0][i].indexOf(String(TabB[0])) == -1 && TabA[0][i].indexOf(String(TabB[1])) == -1 && TabA[0][i].indexOf(String(TabB[2])) == -1) {
            console.log(TabA);
        }
    }
// }
Modifié en dernier par Jpe54 le 30 sept. 2021, 15:30, modifié 1 fois.

Avatar du membre
webmaster
Administrateur du site
Messages : 563
Enregistré le : 28 févr. 2017, 15:19

Re: Array.indexOf sur des tableaux (ou includes(xx))

Message par webmaster » 30 sept. 2021, 09:54

Bonjour,

Je pense que la confusion vient du format de tabB
Il devrait être de la forme

Code : Tout sélectionner

var TabB = [122536],[122263],[252526];
pour écrire

Code : Tout sélectionner

TabB[indice]
Mais si le tableau doit rester multidimension :

Code : Tout sélectionner

var TabB = [
[122536],[122263],[252526]
];
il faut écrire :

Code : Tout sélectionner

TabB[0][indice]
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

Jpe54
Messages : 60
Enregistré le : 10 mars 2017, 14:11

Re: Array.indexOf sur des tableaux (ou includes(xx))

Message par Jpe54 » 30 sept. 2021, 15:25

Un grand merci pour votre disponibilité sur ce forum sur lequel vous n'hésitez nullement à partager vos connaissances !

J'ai renoncé à l'utilisation de indexOf() au profit de includes() suite à une formule conditionnelle de longueur inconnue, liée à des tableaux dynamique.

Voici ce code source personnel permettant d'obtenir le résultat escompté : Extérioriser des datas orphelins qui non pas d'index (code, date ou autres valeurs) pour suite à donner.

Le fonctionnement en l'état est visible via console.log et peut certainement être optimisé en termes de rapidité…

Ce lieu étant un lieu d'échange ce fichier est à disposition de tout ceux qui ne souhaiterait pas réinventer la roue...

Amicalement à tous,

Jean-Paul

Code : Tout sélectionner

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <script>
            // Index (Ancien format tableau)
            var Array_A = [];
            Array_A[0] = "122537";
            Array_A[1] = "122263";
            Array_A[2] = "252526";

            // Datas
            var Array_B = [
                ["122536", "Num 1", "Num 1"],
                ["252526", "Num 2", "Num 2"],
                ["122263", "Num 3", "Num 3"],
                ["122RAS", "Num 4", "Num 4"],
            ];
			
/*
			// Valeurs inconnues à récupérer :
			var Array_B = [
                ["122536", "Num 1", "Num 1"],
                ["122RAS", "Num 4", "Num 4"],
            ];
*/
            // Tableaux A et B dynamiques...
            // Routine pour tester si toutes les valeurs de Array_B ont un index (Colonne 0) correspondant au contenu de Array_A
            // But : Localiser les valeurs orphelines

            Data_Orphelins(Array_A, Array_B);

            function Data_Orphelins(Index, Datas) {
                var Test = 0;
                var Tmp = 0;
                for (var i = 0; i < Datas.length; i++) {
                    for (var n = 0; n < Index.length; n++) {
                        // Déterminer incrémentation de la lecture de Datas
                        if (i !== Tmp) {
                            // Non correspondance totale avec données de Index
                            if (Test == Index.length) {
                                console.log("========================================================");
                                console.log(" => Data Datas Orphelin : [" + Datas[i - 1] + "]");
                                console.log("========================================================");
                            }
                            console.log("Changement de Datas " + i);
							
                            Tmp = i;

                            Test = 0;
                        }
                        // Test absence d'une valeur du Index en data 0 du tableau Datas
                        if (String(Index[n]).includes(String(Datas[i][0])) == false) {
                            Test++;
                            console.log("Valeur Index[" + n + "] " + Index[n] + " Absente [" + Datas[i] + "] > " + Datas[i][0]);
                            console.log("i = " + i + " Test 1 " + Test);
                        } else {
                            // Test si Présence d'une valeur du Index en data 0 de Datas
                            console.log("Valeur Index[" + n + "] " + Index[n] + " Présente [" + Datas[i] + "] > " + Datas[i][0]);
                            console.log("i = " + i + " Test 2 " + Test);
                        }
                    }
                }
                // Test du Dernier élément en sortie de boucle
                if (Test == Index.length) {
                    // Non correspondance avec tableau Index
                    console.log("======================================================");
                    console.log(" => Data Datas Orphelin : [" + Datas[i - 1] + "]");
                    console.log("======================================================");
                }
            }
        </script>
    </body>
</html>
Fichier test :
Test_includes_2 Array.zip
(1.03 Kio) Téléchargé 229 fois

Jpe54
Messages : 60
Enregistré le : 10 mars 2017, 14:11

Re: Array.indexOf sur des tableaux (ou includes(xx))

Message par Jpe54 » 01 oct. 2021, 14:22

Un constat suite mise en application de cette routine:

Insérer la valeur récupérée entre crochet pour le traitement à suivre ne semble pas suffire...

il faut retravailler la récupération comme ligne d'un tableau !

Code : Tout sélectionner

// Transformation en Array pout traitement correct de l'élement du tableau...
    var Orphelin = Datas[i - 1];
    var str = String(Orphelin);
    var reg = new RegExp("[,]+", "g");
    Result = str.split(reg);

// Result contient alors les 3 élements de ArrayB [122536, Num 1, Num 1] sans les double quote
// qui sont accessible via Result[0] Result[1] Result[2] !

Répondre