Как рассчитать общий статус, используя javascript? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть 2 объекта в массиве с 2 сценариями ios:

Если test_status_id принят для всех объектов в массиве, то case_status_id должен быть завершен, иначе case_status_id должен быть отложен. Как мне go это сделать?

const result = [{
                     id:1,
                     case_status_id : 1(pending),
                     case_test_map : [{
                                           id:1,
                                           test_status_id: 1(accepted)
                                      },
                                      {
                                           id:2,
                                           test_status_id: 2(rejected)
                                      }]
                 },
                 {
                     id:2,
                     case_status_id : 2(completed),
                     case_test_map : [{
                                           id:1,
                                           test_status_id: 1(accepted)
                                      },
                                      {
                                           id:2,
                                           test_status_id: 1(accepted)
                                      }]
                 }]

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Попробуйте следующую функцию, она сделает то, что вам нужно:

function calculateCaseStatus(result) {

  // at first, iterate over each element of result array
  for(let res of result) {

    // assume, 'case_status_id' would be set to 2 by default(i.e. 'completed')
    let flag = true;

    // now, check if any 'test_status_id' is set to 2(i.e. rejected)
    // for that, first iterate over each element of 'case_test_map' array
    for(let cmp of res.case_test_map) {

      if(cmp.test_status_id !== 1) {
        // if any test_status_id is not completed, then
        // case_status_id can't be 2(i.e. completed)
        // so, make the flag false
        flag = false;
        break;
      }
    }

    // if flag is true, set case_status_id to 2 (i.e. completed)
    if(flag) {
      res.case_status_id = 2;
    } else {
      // else set case_status_id to 1 i.e.(pending)
      res.case_status_id = 1;
    }
  }
}

Вы должны называть ее так:

calculateCaseStatus(result);

// and to check the result
console.log(result);
0 голосов
/ 04 августа 2020

Попробуйте это

result.forEach(res => {
    const resultStatuses = res.case_test_map.map(test => test.test_status_id);
    if(resultStatuses.every( (val, i, arr) => val === arr[0] ) ) {
        if(resultStatuses[0] === 'accepted') {
            res.case_status_id = 'accepted'
        }
    }
    else {
        res.case_status_id = 'pending'
    }
})

источники: Проверить, все ли значения массива равны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...