2016-03-24 2 views
0

У меня есть два массива, в которых хранится много элементов, а у другого будет только один элемент для проверки. Оба массива будут иметь одинаковые параметры, но я хочу проверить новый массив двумя параметрами «TaskId» и «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

Скажет у вас есть пункт, чтобы проверить, что находится в вашем массиве темпа:

var item = tmpArray[0]; 

Просто перебирать свой основной массив и проверить на match.If совпадений не найдено, нажмите на массив.

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; 

Если вы хотите изменить произвольное количество параметров, вам придется перебирать параметры вашего объекта и изменять их.

0
mainArray.forEach(function (ticket) { 
    if (ticket.TaskId === tmpArray[0].TaskId && ticket.ResourceId === tmpArray[0].ResourceId) { 
     ticket.Status = tmpArray[0].Status; 
    } 
}); 

console.log(mainArray); 

не быстрее, но простой.

0

MainArray выглядит как массив массивов. Прокрутите каждый элемент MainArray с помощью .pop, пока каждый из них не будет отдельным массивом, а затем пропустите каждый отдельный массив, используя .shift, чтобы исключить индекс 1. Затем снова запустите с помощью оператора ==, чтобы найти соответствующий массив.

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>');

Смежные вопросы