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

Posted

技术标签:

【中文标题】比较两个数组以查找匹配值的 for 循环【英文标题】:A for-loop that compares two arrays looking for matching values 【发布时间】:2012-03-27 04:47:19 【问题描述】:

我有两个数组需要相互检查,如果它们达到了每个数组中的两个项目实际上彼此相同的程度,那么在某处附加一些 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,并从 courseHwork 数组中的匹配对象中附加该属性“title”。

注意:我的实际 daysArray 将数字包含为字符串“1”-“31”,并且对象的 courseHwork 数组是动态填充的,因此它可以包含任意数量的对象,但是没有对象的属性值会超过“31” " 在找到的子字符串中。

*问题: 如何循环遍历两个数组,每次在两个数组之间找到匹配值时,都会找到一个也包含完全相同值的 html 元素,然后附加一些内容?*

【问题讨论】:

您可能想查看在合并排序中合并步骤是如何发生的... 呃 - 到底是什么问题? 对其进行了更新,在底部添加了一个更清晰的问题。很抱歉造成混乱。 courseHwork[i].duedate 暗示courseHwork 是对象数组,为什么一开始就声明为字符串数组? @deathApril,这只是一个例子,我知道我的问题可能难以理解,我很难措辞。但是在 js cmets 和末尾的“注释”中,我提到了正确的情况。 【参考方案1】:

我认为你应该首先创建一个array intersection,然后遍历结果来做你的事情......

【讨论】:

Underscore.js 提供了这样的方法documentcloud.github.com/underscore/#intersection 和许多其他方法。【参考方案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】:

这是我想出的主意:

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 个数组中查找 SAME 值,如果找到,它会将一些内容附加到包含“4”的 div 中。这就是你想要的吗?

这是一个具有 2 个相同值的示例,具有 2 个 div,每个 div 包含一个值。 http://jsfiddle.net/4cqCE/3/

【讨论】:

很高兴它有帮助,尽管我使用的是示例数组,而不是像 deathApril 注意到的那样使用对象数组。但我希望改变这不应该是一个问题! 请在此处发布相关代码并提供jsfiddle链接。【参考方案4】:

您好,使用 lodash 或下划线可以轻松地将两个数组相交。

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

结果是 [2]。

Lodash 文档:https://lodash.com/docs/4.17.2#intersection

【讨论】:

以上是关于比较两个数组以查找匹配值的 for 循环的主要内容,如果未能解决你的问题,请参考以下文章

java怎么判断数组中有重复的元素

比较两个对象数组,并将匹配值的元素排除到JS中的新数组中

比较两个数组是不是相等[关闭]

WPF比较两个数据表以查找匹配值

Oracle:比较两个不同表中没有主键的字符串列以查找匹配/不匹配的字符串

使用 Jquery:比较两个数组以进行任何匹配