如何使用jQuery LINQ比较两个ArrayList对象并获取匹配项
使用jQuery/LINQ.js 获取两个数组的匹配项
嘿,我来帮你搞定这个需求——从array2里筛选出和array1里元素匹配的项对吧?这里有两种实用的实现方式,你可以根据情况选:
方法1:用LINQ.js(jQuery生态常用的LINQ工具库)
如果你已经引入了linq.js库,直接用它的交集方法就能轻松搞定:
// 先确保页面里引入了linq.js var array1 = [{ 'Id': '1', 'ReportName': 'Action Log', 'ACL': 'UserActionLog' }]; var array2 = [{ 'Id': '1', 'ReportName': 'Action Log', 'ACL': 'UserActionLog' }, { 'Id': '2', 'ReportName': 'Audit Report', 'ACL': 'AuditReport' }, { 'Id': '3', 'ReportName': 'User Log', 'ACL': 'User Log' }, { 'Id': '4', 'ReportName': 'Report', 'ACL': 'Report' }, { 'Id': '5', 'ReportName': 'User Action', 'ACL': 'User Action' }, { 'Id': '6', 'ReportName': 'Dashboard', 'ACL': 'Dashboard' }]; // 生成匹配结果:这里可以自定义匹配规则 var result = Enumerable.From(array2) .Intersect(array1, function(x, y) { // 选项1:只按Id匹配(简单高效) return x.Id === y.Id; // 选项2:严格匹配所有属性(完全一致才保留) // return x.Id === y.Id && x.ReportName === y.ReportName && x.ACL === y.ACL; }) .ToArray(); console.log(result); // 输出就是你想要的[{ 'Id': '1', ... }]
方法2:只用原生jQuery(不用额外加库)
如果不想引入新的库,用jQuery自带的$.grep和$.each也能实现:
var array1 = [{ 'Id': '1', 'ReportName': 'Action Log', 'ACL': 'UserActionLog' }]; var array2 = [{ 'Id': '1', 'ReportName': 'Action Log', 'ACL': 'UserActionLog' }, { 'Id': '2', 'ReportName': 'Audit Report', 'ACL': 'AuditReport' }, { 'Id': '3', 'ReportName': 'User Log', 'ACL': 'User Log' }, { 'Id': '4', 'ReportName': 'Report', 'ACL': 'Report' }, { 'Id': '5', 'ReportName': 'User Action', 'ACL': 'User Action' }, { 'Id': '6', 'ReportName': 'Dashboard', 'ACL': 'Dashboard' }]; // 筛选array2中在array1里有匹配的项 var result = $.grep(array2, function(item2) { var isMatch = false; // 遍历array1找匹配 $.each(array1, function(index, item1) { // 这里用严格匹配所有属性的规则,你也可以改成只比Id if (item1.Id === item2.Id && item1.ReportName === item2.ReportName && item1.ACL === item2.ACL) { isMatch = true; return false; // 找到匹配就跳出循环,省点性能 } }); return isMatch; }); console.log(result); // 完美得到你要的结果
重点提示一下:两种方法的核心都是自定义匹配规则——如果你的需求是只要Id相同就算匹配,就用第一种规则;如果必须所有属性都完全一致才保留,就用第二种规则。哪怕array1里有多个元素,这两种方法都能找出所有交集项哦~
内容的提问来源于stack exchange,提问作者Renugopal
相关产品推荐
相关产品推荐

