我有两个数组,一个存储很多项目,另一个只有一个要检查的项目。 两个数组都有相同的参数,但我想检查新数组的两个参数" TaskId"和#34; ResourceId" ,如果两个参数与主数组匹配,我想删除然后添加新数组。
例如:
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','Status':'Pending'}];
在tmpArray中总会有一个项目
我想在TaskId和ResourceId的基础上进行检查,如果mainArray中的相似项匹配则删除该项并使用新项更新它,或者只是用新的项更新它。
即我的最终数组应该是
[{'Name':'Ticket1','TaskId':'b5de781e-9d25-49e7-af6d-3e254e894c04','ResourceId':'977dacf0-0b61-413e-a9a4-b469ab30d1b1',
'Status':'Pending'},{'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'}];
此处第一项已更新。
答案 0 :(得分:0)
假设你有一个项目要检查你的临时数组:
var item = tmpArray[0];
只需遍历主阵列并检查匹配。如果找不到匹配项,请按下阵列。
function() {
for (var i = 0; i < mainArray.length; i++) {
if (arr[i].resourceID === item.resourceID && arr[i].taskID === item.taskID) {
// DO STUFF
return;
}
}
mainArray.push(item);
}
现在,如果找到匹配项,您实际想要做什么有点不清楚。假设您总是希望使用临时数组中的对象进行更新,则只需替换当前项:
arr[i] = item;
如果您只想定位某些参数,请明确更改它们:
arr[i].status = item.status;
如果要更改任意数量的参数,则必须迭代对象的参数并更改每个参数。
答案 1 :(得分:0)
mainArray.forEach(function (ticket) {
if (ticket.TaskId === tmpArray[0].TaskId && ticket.ResourceId === tmpArray[0].ResourceId) {
ticket.Status = tmpArray[0].Status;
}
});
console.log(mainArray);
不是更快,而是简单。
答案 2 :(得分:0)
MainArray看起来像一个数组数组。使用.pop循环遍历MainArray的每个项目,直到每个项目都是一个单独的数组,然后使用.shift循环遍历每个单独的数组以消除索引1.然后使用==运算符再次循环以查找匹配的数组。
答案 3 :(得分:0)
由于短路,我建议使用Array#some()
。
function update(array, temp) {
temp.forEach(function (a) {
array.some(function (b, i, bb) {
if (a.TaskId === b.TaskId && a.ResourceId === b.ResourceId) {
bb[i] = a;
return true;
}
}) || array.push(a);
});
}
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', 'Status': 'Pending' }];
update(mainArray, tmpArray);
document.write('<pre>' + JSON.stringify(mainArray, 0, 4) + '</pre>');
&#13;