比较两个数组以寻找匹配值的for循环

16

我有两个数组需要相互比对,如果两个数组中的每个元素都相同,则在某个位置附加一些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 />");
        }
        }
如果按计划运行,它会找到一个包含字符串 "4" 的 div,并将与 coursesHwork 数组中匹配对象的 'title' 属性附加到该 div 上。 注意:我的 daysArray 实际上涵盖了数字作为字符串 "1"-"31",并且对象数组 courseHwork 是动态生成的,因此可以包含任意数量的对象,但没有一个对象的属性值超过正在查找的子字符串 "31"。 问题:如何循环遍历两个数组,并每次在两个数组之间找到匹配值时,找到一个还包含完全相同值的 html 元素,然后将某些内容附加到该元素上?

你可能想查一下归并排序中合并步骤的发生方式... - Cameron
2
嗯 - 究竟是什么问题? - Aprillion
已更新,底部包含更清晰的问题。对于造成的困扰,我们深感抱歉。 - captainrad
courseHwork[i].duedate 表示 courseHwork 是一个对象数组,为什么一开始你把它声明成了一个字符串数组呢? - Aprillion
@deathApril,那只是一个例子。我知道我的问题可能很难理解,而且我很难用语言表达清楚。但是在JS注释和最后的“注意事项”中,我提到了正确的情况。 - captainrad
4个回答

15

这是我想到的一个主意:

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/

首先,检查一下这是不是你想要的。它会在两个数组中寻找相同的值,如果找到了,就会将某些东西添加到包含“4”的div中。这是你想要的吗?

以下是一个具有两个相同值的示例,其中有两个div,每个div都包含其中一个值。http://jsfiddle.net/4cqCE/3/


虽然我使用的是示例数组,而不是像deathApril注意到你所拥有的对象数组。但是更改这个应该不是问题,希望能帮到你! - Kedor
请在此处发布相关代码,并提供jsfiddle链接。 - cambraca

4
你可以像这样做:

你可以像这样做:

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
在这里的所有答案中,这个最有道理。 - Kermit_ice_tea

2
我认为你应该先创建一个数组交集,然后迭代结果来完成你的操作...

Underscore.js 提供了诸如 http://documentcloud.github.com/underscore/#intersection 等许多方法。 - Tuan

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接