Как исключить и отформатировать совпадающие значения в NodeJS? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть Object obj, как показано ниже:

const obj = {
Hostname: "abc.com"
Check1Status: "PASS"
Check2Status: "PASS"
Check3Status: "FAIL"
Check3ErrorHeading: "Reason for Check3"
Check3ErrorDetail: "Details for Check3"
Check4Status: "FAIL"
Check4ErrorHeading: "Reason for Check4"
Check4ErrorDetail: "Details for Check4"
TotalExecutions: 5
};
  1. Я хочу захватить TotalExecutions
  2. Я хочу исключить все пары значений ключа, которые иметь PASS в качестве значения.
  3. Я хочу исключить ключ Hostname и его значение.
  4. Я хочу захватить только checks, которые имеют Status как FAIL таким образом, чтобы результат выглядел следующим образом: TotalExecutions:5,Check3:Reason for Check3:Details for Check3, Check4:Reason for Check4:Details for Check4

Окончательный результат должен быть string. Я написал следующий код, который исключает PASS и включает TotalExecutions и исключает HostName, но не реализует 4

            const result = Object.values(obj).map
            (el => Object.entries(el).filter(([key, value]) => value !== 'PASS' && key !== 'Hostname').reduce((acc, [key, value]) => ({
                ...acc,
                [key]: value
            }), {}));

Ответы [ 3 ]

1 голос
/ 01 августа 2020

const obj = {
  Hostname: "abc.com",
  Check1Status: "PASS",
  Check2Status: "PASS",
  Check3Status: "FAIL",
  Check3ErrorHeading: "Reason for Check3",
  Check3ErrorDetail: "Details for Check3",
  Check4Status: "FAIL",
  Check4ErrorHeading: "Reason for Check4",
  Check4ErrorDetail: "Details for Check4",
  TotalExecutions: 5
};

var output = [`Total Executions: ${obj.TotalExecutions}`];

for (var key in obj) {
  if(obj[key] === 'FAIL') {
    output.push(`
    ${key.replace('Status', '')}: 
    ${obj[key.replace('Status', 'ErrorHeading')]}: 
    ${obj[key.replace('Status', 'ErrorDetail')]}`)
  }
}

console.log(output.join(', '))
1 голос
/ 01 августа 2020

Следующее должно работать для вас.

const obj = {
    Hostname: "abc.com",
    Check1Status: "PASS",
    Check2Status: "PASS",
    Check3Status: "FAIL",
    Check3ErrorHeading: "Reason for Check3",
    Check3ErrorDetail: "Details for Check3",
    Check4Status: "FAIL",
    Check4ErrorHeading: "Reason for Check4",
    Check4ErrorDetail: "Details for Check4",
    TotalExecutions: 5
};

let resultObj = {};

for (let prop in obj) {
    if (prop == "TotalExecutions") {
        resultObj[prop] = obj[prop];
    }

    if (obj[prop] == "FAIL") {
        let startOfKey = prop.replace("Status", "");
        resultObj[startOfKey] = obj[startOfKey + "ErrorHeading"] + ":" + obj[startOfKey + "ErrorDetail"]
    }

}
console.log(resultObj)
0 голосов
/ 01 августа 2020

Надеюсь, это поможет вам

function formatter() {
  const obj = {
    Hostname: "abc.com",
    Check1Status: "PASS",
    Check2Status: "PASS",
    Check3Status: "FAIL",
    Check3ErrorHeading: "Reason for Check3",
    Check3ErrorDetail: "Details for Check3",
    Check4Status: "FAIL",
    Check4ErrorHeading: "Reason for Check4",
    Check4ErrorDetail: "Details for Check4",
    TotalExecutions: 5
  };

  let result = `TotalExecutions:${obj['TotalExecutions']}`;

  Object.keys(obj).forEach(key => {

    if (obj[key] === 'FAIL') {
      const checkKey = key.match(/Check\d/);
      const errorHeading = obj[`${checkKey}ErrorHeading`];
      const errorDetail = obj[`${checkKey}ErrorDetail`];
      result += `,${checkKey}:${errorHeading}:${errorDetail}`;
    }
  });

  return result;
}

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