За цикл, который сравнивает два массива, которые ищут совпадающие значения
У меня есть два массива, которые мне нужно проверить друг против друга, и если они достигли точки, где оба элемента в каждом массиве фактически совпадают друг с другом, добавьте где-нибудь какой-нибудь 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.
note: мои фактические дниArray покрывают числа как строки "1" - "31", а массив объектов объекта dynamic динамически заполняется, поэтому он может содержать любое количество объектов, однако ни один объект не будет иметь значение свойства, которое превышает "31" в найденной подстроке.
* Вопрос:
Как я могу прокручивать два массива, и каждый раз, когда совпадающие значения находятся между двумя массивами, найден элемент html, который также содержит то же самое значение, то есть что-то приложенное к нему? *
Ответы
Ответ 1
Вот идея, с которой я придумал:
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" в нем. Это то, что вы хотите?
Вот пример с двумя одинаковыми значениями с двумя div, каждый из которых содержит одно из значений.
http://jsfiddle.net/4cqCE/3/
Ответ 2
Вы можете сделать что-то вроде этого:
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
, содержащего только повторяющиеся элементы.
Ответ 3
Привет, используя lodash или подчеркивание, вы можете легко пересечь два массива.
_.intersection([2, 1], [2, 3]);
Результат - [2].
Документ Lodash: https://lodash.com/docs/4.17.2#intersection
Ответ 4
Я думаю, вы должны сначала создать пересечение массива , а затем перебрать результат, чтобы сделать свою вещь...