2012-03-09 76 views
12

Tôi có hai mảng mà tôi cần kiểm tra với nhau và nếu chúng đạt đến điểm mà cả hai mục trong mỗi mảng thực tế giống nhau, sau đó nối thêm một số html ở đâu đó.Một vòng lặp so sánh hai mảng tìm kiếm các giá trị phù hợp

Dưới đây là một số bit của mã tôi đã cố gắng làm ví dụ:

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

như vậy trong các mảng trên chỉ có một giá trị phù hợp, là: "4"

đây là tiếp theo một phần:

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

Nếu mọi thứ hoạt động như đã định, nó sẽ tìm thấy một div, chứa chuỗi "4" và nối thêm thuộc tính '' từ đối tượng phù hợp trong mảng courseHwork.

lưu ý: daysArray thực tế của tôi bao gồm số là chuỗi "1" - "31" và mảng courseHwork của đối tượng được điền động để có thể chứa bất kỳ số đối tượng nào, tuy nhiên không đối tượng nào có giá trị thuộc tính vượt quá " 31 "trong chuỗi con được tìm thấy.

* HỎI: Làm thế nào tôi có thể lặp qua hai mảng và mỗi thời điểm đó giá trị khớp được tìm thấy giữa hai mảng, một yếu tố html được tìm thấy mà cũng chứa giá trị chính xác cùng, sau đó đã điều gì đó gắn vào nó ? *

+0

Bạn có thể muốn tìm cách bước hợp nhất xảy ra trong một Merge Sort ... – Cameron

+2

uh - câu hỏi là gì, chính xác? – Aprillion

+0

đã cập nhật nó để bao gồm câu hỏi rõ ràng hơn ở dưới cùng. xin lỗi vì sự nhầm lẫn. – captainrad

Trả lời

13

Đây là ý tưởng tôi đã đưa ra:

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

Bạn có thể tìm thấy nó làm việc ở đây: http://jsfiddle.net/4cqCE/2/

Vâng, kiểm tra xem những gì bạn muốn. Đầu tiên, nó sẽ tìm giá trị SAME trong 2 mảng, và nếu nó tìm thấy nó, nó sẽ thêm thứ gì đó vào div chứa "4" trong đó. Đó là điều bạn muốn?

Dưới đây là ví dụ có 2 giá trị giống nhau, với 2 div, mỗi giá trị chứa một giá trị. http://jsfiddle.net/4cqCE/3/

+0

Thực hiện tốt! Bạn đã nhận nó đúng! Cảm ơn! – captainrad

+0

Vui vì nó đã giúp, tho i đã sử dụng mảng ví dụ, không mảng của đối tượng như deathApril nhận thấy bạn có. Nhưng thay đổi đó không phải là một vấn đề tôi hy vọng! – Kedor

+0

Phải, tôi chỉ thích nghi nó với các đối tượng và nó hoạt động tuyệt vời! – captainrad

1

tôi nghĩ rằng trước tiên bạn phải tạo một array intersection và sau đó lặp qua kết quả làm việc của bạn ...

+0

Underscore.js cung cấp phương thức http://documentcloud.github.com/underscore/#intersection và nhiều phương thức khác. – Tuan

3

Bạn có thể làm một cái gì đó như thế này:

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

Bạn có thể chạy mã ở đây: http://jsfiddle.net/WtEwJ/2/

Điều này sẽ dẫn đến mảng mới results chỉ chứa các mục trùng lặp.

+1

của tất cả các câu trả lời ở đây, điều này làm cho ý nghĩa nhất –

Các vấn đề liên quan