2012-03-09 3 views
12

У меня есть два массива, которые мне нужно проверять друг на друге, и если они достигли точки, где оба элемента в каждом массиве фактически совпадают друг с другом, добавьте где-то где-то 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» и добавляется, что свойство «название» из соответствующего объекта в массиве courseHwork.

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

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

+0

Вы можете посмотреть, как шаг слияния происходит в Merge Sort ... – Cameron

+2

ээ - что это вопрос именно? – Aprillion

+0

обновил его, чтобы включить более четкий вопрос внизу. извините за путаницу. – captainrad

ответ

13

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

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» в нем. Это то, что вы хотите?

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

+0

Молодцы! У тебя все получилось! Благодаря! – captainrad

+0

Рад, что это помогло, потому что я использовал примеры массивов, а не массивы объекта, как deathApril заметил, что у вас есть. Но изменение этого не должно быть проблемой, я надеюсь! – Kedor

+0

Правильно, я только что адаптировал его к объектам, и он отлично работает! – captainrad

1

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

+0

Underscore.js предлагает такой метод http://documentcloud.github.com/underscore/#intersection и многие другие. – Tuan

3

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

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, который содержит только дублирующие элементы.

+1

всех ответов здесь, это имеет наибольший смысл –

2

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

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

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

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

Смежные вопросы