如果另一个数组具有类似的项,则从数组中删除项

时间:2016-03-15 16:11:41

标签: javascript jquery

我有两个数组,一个是主数组,其中我有不同的参数,另一个数组只有两个参数匹配第一个数组。

如果类似的数组(在这两个参数上匹配)匹配,我想从第一个数组中删除完整的项目。

例如:

var mainArray = [{'Name':'Ticket1','TaskId':'b5de781e-9d25-49e7-af6d-3e254e894c04','ResourceId':'977dacf0-0b61-413e-a9a4-b469ab30d1b1',
'Status':'Completed'},{'Name':'Ticket2','TaskId':'c5ae581e-9f25-49e7-af6d-3e254e894c04','ResourceId':'37fdadf1-0b61-413e-a9a4-b469ab30d1b1',
'Status':'InProgress'},{'Name':'Ticket3','TaskId':'45af551e-9f25-49e7-af6d-3e254e894c04','ResourceId':'37fdadf1-0b61-413e-a9a4-b469ab30d1b1',
'Status':'InProgress'}];

var tmpArray = [{'TaskId':'b5de781e-9d25-49e7-af6d-3e254e894c04','ResourceId':'977dacf0-0b61-413e-a9a4-b469ab30d1b1'},{'TaskId':'45af551e-9f25-49e7-af6d-3e254e894c04','ResourceId':'37fdadf1-0b61-413e-a9a4-b469ab30d1b1'}];

我希望我的最终数组中的项目不在tmpArray中,只有类似的TaskId和ResourceId。

,即我的最终数组应该看起来像

[{'Name':'Ticket2','TaskId':'c5ae581e-9f25-49e7-af6d-3e254e894c04','ResourceId':'37fdadf1-0b61-413e-a9a4-b469ab30d1b1',
'Status':'InProgress'}]

这里的项目被删除,因为它们在tmpArray中匹配了TaskId和ResourceId

1 个答案:

答案 0 :(得分:2)

Array#filterArray#some结合应有所帮助。



var mainArray = [{ 'Name': 'Ticket1', 'TaskId': 'b5de781e-9d25-49e7-af6d-3e254e894c04', 'ResourceId': '977dacf0-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'Completed' }, { 'Name': 'Ticket2', 'TaskId': 'c5ae581e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'InProgress' }, { 'Name': 'Ticket3', 'TaskId': '45af551e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'InProgress' }],
    tmpArray = [{ 'TaskId': 'b5de781e-9d25-49e7-af6d-3e254e894c04', 'ResourceId': '977dacf0-0b61-413e-a9a4-b469ab30d1b1' }, { 'TaskId': '45af551e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1' }],
    result = mainArray.filter(function (a) {
        return !tmpArray.some(function (b) {
            return a.TaskId === b.TaskId && a.ResourceId === b.ResourceId;
        });
    });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

或者具有更好性能/复杂性和辅助对象的解决方案

&#13;
&#13;
var mainArray = [{ 'Name': 'Ticket1', 'TaskId': 'b5de781e-9d25-49e7-af6d-3e254e894c04', 'ResourceId': '977dacf0-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'Completed' }, { 'Name': 'Ticket2', 'TaskId': 'c5ae581e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'InProgress' }, { 'Name': 'Ticket3', 'TaskId': '45af551e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1', 'Status': 'InProgress' }],
    tmpArray = [{ 'TaskId': 'b5de781e-9d25-49e7-af6d-3e254e894c04', 'ResourceId': '977dacf0-0b61-413e-a9a4-b469ab30d1b1' }, { 'TaskId': '45af551e-9f25-49e7-af6d-3e254e894c04', 'ResourceId': '37fdadf1-0b61-413e-a9a4-b469ab30d1b1' }],
    result = function (array1, array2) {
        var o = {};
        tmpArray.forEach(function (a) {
            o[a.TaskId + '|' + a.ResourceId] = true;
        });
        return mainArray.filter(function (a) {
            return !o[a.TaskId + '|' + a.ResourceId];
        });
    }(mainArray, tmpArray);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;