web-dev-qa-db-fra.com

Une boucle for qui compare deux tableaux à la recherche de valeurs correspondantes

J'ai deux tableaux que je dois vérifier l'un par rapport à l'autre et s'ils ont atteint un point où les deux éléments de chaque tableau sont en fait les mêmes, alors ajoutez du html quelque part.

Voici quelques extraits du code que j'ai essayé à titre d'exemple:

var daysArray = ["1", "2", "3", "4", "5"];
var courseHwork = ["4", "8", "15", "16", "23", "42"];

donc dans les tableaux ci-dessus, il n'y a qu'une seule valeur correspondante, soit: "4"

voici la partie suivante:

for (var i = 0; i < courseHwork.length; i++) {
//in my actual code courseHwork contains several objects, each of which 
//has a duedate property, so here I want to see if this part of the duedate 
//property is equal to any position in the daysArray array.
   if (courseHwork[i].duedate.substring(8,10) === daysArray[i]) {
//here I mean to select an element of this class that contains a string 
//that is equal to that of the matching positions in both arrays. then 
//once found it should take the title property from one of the objects in the
//courseHwork array and append it there.
   $('.fc-day-number:contains("'+daysArray[i]+'")').append("<div class='assignment'>"+courseHwork[i].title+"</div><br />");
        }
        }

Si les choses ont fonctionné comme prévu, il aura trouvé un div, qui contient la chaîne "4" et a ajouté la propriété 'title' de l'objet correspondant dans le tableau courseHwork.

remarque: mon tableau actuel daysArray couvre les nombres sous forme de chaînes "1" - "31", et le tableau d'objets courseHwork est rempli de manière dynamique afin qu'il puisse contenir un nombre quelconque d'objets, mais aucun objet n'aura une valeur de propriété qui dépasse "31" dans le sous-chaîne trouvée.

* ( QUESTION: Comment puis-je parcourir deux tableaux et chaque fois que les valeurs correspondantes sont trouvés entre les deux tableaux, un élément html est trouvé qui contient également cette même valeur exacte, puis a quelque chose en annexe? *

15
captainrad

Voici l'idée que j'ai eue:

var daysArray = ["1", "2", "3", "4", "5", "12"];
var courseHwork = ["4", "8", "15", "16", "23", "42", "12"];

for (var i = 0; i < courseHwork.length; i++) {
    for (var j = 0; j < daysArray.length; j++) {
        if (courseHwork[i] == daysArray[j]) {
          $('div:contains("'+daysArray[j]+'")').append("<div class='assignment'>"+courseHwork[i]+" - appended</div>");
        }
    }
}

Vous pouvez le trouver ici: http://jsfiddle.net/4cqCE/2/

Eh bien, vérifiez si c'est ce que vous voulez. D'abord, il cherche la même valeur dans 2 tableaux, et s'il le trouve, il ajoute quelque chose à div contenant "4". Est-ce que c'est ce que tu veux?

Voici un exemple avec 2 mêmes valeurs, avec 2 divs, chacune contenant une des valeurs. http://jsfiddle.net/4cqCE/3/

15
Kedor

Vous pouvez faire quelque chose comme ça:

var daysArray = ["1", "2", "3", "4", "5"];
var courseHwork = ["4", "8", "15", "16", "23", "42"];

var arr = daysArray.concat(courseHwork);
var sorted_arr = arr.sort();
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i]) {
        results.Push(sorted_arr[i]);
    }
}

console.log(results);

Vous pouvez exécuter le code ici: http://jsfiddle.net/WtEwJ/2/

Cela se traduira par un nouveau tableau results qui ne contient que les éléments en double.

3
Paul

je pense que vous devez d'abord créer un intersection de tableaux puis itérer sur le résultat pour faire votre chose ...

2
Aprillion

Salut en utilisant lodash ou souligné, vous pouvez facilement intersecter deux tableaux.

_.intersection([2, 1], [2, 3]);

Le résultat est [2].

Document Lodash: https://lodash.com/docs/4.17.2#intersection

2
Yogesh Patel