Цикл for, который сравнивает два массива, ища совпадающие значения - PullRequest
15 голосов
/ 09 марта 2012

У меня есть два массива, которые мне нужно проверить друг против друга, и если они достигли точки, когда оба элемента в каждом массиве фактически совпадают друг с другом, то добавьте где-нибудь html.

Вот некоторые фрагменты кода, которые я пробовал в качестве примера:

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

, поэтому в массивах выше есть только одно совпадающее значение: "4"

вот следующая часть:

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 />");
        }
        }

Если все работает как запланировано, он найдет div, который содержит строку «4» и добавит это свойство 'title' из соответствующего объекта в массиве courseHwork.

примечание: мой фактический daysArray охватывает числа в виде строк «1» - «31», а массив объектов courseHwork заполняется динамически, поэтому он может содержать любое количество объектов, однако ни один объект не будет иметь значение свойства, превышающее «31 "в найденной подстроке.

* ВОПРОС: Как я могу перебрать два массива, и каждый раз, когда между двумя массивами обнаруживаются совпадающие значения, обнаруживается HTML-элемент, который также содержит это точно такое же значение, а затем к нему добавляется что-то? *

Ответы [ 4 ]

15 голосов
/ 09 марта 2012

Вот идея, которую я придумал:

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>");
        }
    }
}

Вы можете найти его здесь: http://jsfiddle.net/4cqCE/2/

Ну, проверь, если хочешь. Сначала он ищет то же самое значение в 2 массивах, и если он его находит, он добавляет что-то к div, содержащему "4". Это то, что вы хотите?

Вот пример с 2 одинаковыми значениями, с 2 делителями, каждое из которых содержит одно из значений. http://jsfiddle.net/4cqCE/3/

3 голосов
/ 09 марта 2012

Вы можете сделать что-то вроде этого:

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);

Вы можете запустить код здесь: http://jsfiddle.net/WtEwJ/2/

Это приведет к новому массиву results, который содержит только дубликаттовар.

2 голосов
/ 07 декабря 2016

Привет, используя lodash или подчеркивание, вы можете легко пересечь два массива.

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

Результат равен [2].

Документ Lodash: https://lodash.com/docs/4.17.2#intersection

2 голосов
/ 09 марта 2012

я думаю, что вы должны сначала создать пересечение массива , а затем выполнить итерацию по результату, чтобы выполнить свою задачу ...

...