Как объединить все «условия» под 0-ым индексом, конкретный ключ «логика» и значение вложенного JSON? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть вложенный объект, и я хочу найти соединение для каждого "условия": 0-й ключ индекса "логика" и значение в нем. Допустим, объект выглядит так:

Исходный ввод:

[
  {
    "conditions": [
      {
        "logic": "AND",
        "parameter": "Risk Engine Score",
        "condition": "Equals",
        "value": "122",
        "level": "first",
        "type": "condition"
      },
      {
        "level": "second",
        "type": "group",
        "nextChildLogic": "AND",
        "conditions": [
          {
            "logic": "AND",
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "123",
            "level": "second",
            "type": "condition"
          },
{
            "logic": "AND",
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "35645",
            "level": "second",
            "type": "condition"
          }
        ],
        "groupLogic": "AND"
      }
    ],
    "modeOfAuth": "otp"
  },
  {
    "conditions": [
      {
        "logic": "AND",
        "parameter": "Risk Engine Score",
        "condition": "< Less than",
        "value": "12",
        "level": "first",
        "type": "condition"
      }
    ],
    "modeOfAuth": "frictionless"
  },
  {
    "conditions": [
      {
        "logic": "AND",
        "parameter": "Risk Engine Score",
        "condition": "Equals",
        "value": "12",
        "level": "first",
        "type": "condition"
      },
      {
        "level": "second",
        "type": "group",
        "nextChildLogic": "AND",
        "conditions": [
          {
            "logic": "AND",
            "parameter": "Amount",
            "condition": "< Less than",
            "value": "12",
            "level": "second",
            "type": "condition"
          },
          {
            "logic": "AND",
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "345",
            "level": "second",
            "type": "condition"
          }

        ],
        "groupLogic": "AND"
      }
    ],
    "modeOfAuth": "frictionless"
  }
]

Ожидаемый результат:

[
  {
    "conditions": [
      {
        "parameter": "Risk Engine Score",
        "condition": "Equals",
        "value": "122",
        "level": "first",
        "type": "condition"
      },
      {
        "level": "second",
        "type": "group",
        "nextChildLogic": "AND",
        "conditions": [
          {
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "123",
            "level": "second",
            "type": "condition"
          },
{
            "logic": "AND",
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "35645",
            "level": "second",
            "type": "condition"
          }
        ],
        "groupLogic": "AND"
      }
    ],
    "modeOfAuth": "otp"
  },
  {
    "conditions": [
      {
        "logic": "AND",
        "parameter": "Risk Engine Score",
        "condition": "< Less than",
        "value": "12",
        "level": "first",
        "type": "condition"
      }
    ],
    "modeOfAuth": "frictionless"
  },
  {
    "conditions": [
      {
        "logic": "AND",
        "parameter": "Risk Engine Score",
        "condition": "Equals",
        "value": "12",
        "level": "first",
        "type": "condition"
      },
      {
        "level": "second",
        "type": "group",
        "nextChildLogic": "AND",
        "conditions": [
          {
            "parameter": "Amount",
            "condition": "< Less than",
            "value": "12",
            "level": "second",
            "type": "condition"
          },
          {
            "logic": "AND",
            "parameter": "Risk Engine Score",
            "condition": "Equals",
            "value": "345",
            "level": "second",
            "type": "condition"
          }

        ],
        "groupLogic": "AND"
      }
    ],
    "modeOfAuth": "frictionless"
  }
]

код:

const parseData = (data) => data.map(({conditions, ...rest}) => conditions.map(({logic, ...conditions}) => ({conditions, ...rest})));

console.log(parseData(data));

Попробовал вышеуказанный код. вышеупомянутый объект JSON во всех индексах. Каждое условие только для «логического» ключа 0-го индекса необходимо удалить

1 Ответ

1 голос
/ 14 мая 2019
var recursive = b =>
  b.map((val, i) => {
    if (i === 0) delete val.logic;
    if (val.conditions) {
      val.conditions = recursive(val.conditions);
    }
    return val;
  });

Что-то вроде этого должно работать, я просто удаляю logic, если это первый элемент массива, и также рекурсивно вызываю эту функцию для каждого вложенного массива conditions внутри этих объектов.

...