Сопоставление объектов ES6 - PullRequest
1 голос
/ 11 июля 2020

Я работал над чем-то, но застрял в точке, где у меня есть входные данные как -

var definition = [
{
    "name": "objA",
    "type": "object",
    "items": [
      {
        "value": "",
        "name": "A"
      },
      {
        "value": "",
        "name": "B"
      },
      {
        "value": "",
        "name": "C"
      }
    ]
  },
  {
    "name": "objX",
    "type": "object",
    "items": [
      {
        "value": "",
        "name": "X"
      },
      {
        "value": "",
        "name": "Y"
      },
      {
        "value": "",
        "name": "Z"
      }
    ]
  }
];

var data = {
    "objA": {
        "A": "ValA",
        "B": "ValB",
        "C": "ValC"
    },
    "objX": {
        "X": "ValX",
        "Y": "ValY",
        "Z": "ValZ"
    }
};

const updateSchema = (data, definition) => {
        definition.forEach((subDef) => {
            var node = data[subDef.name];
            subDef.items.forEach((sub)=> {
                sub.value = node[sub.name] 
            });
        });
           
        return definition;
}

console.log(updateSchema(data,definition))
    

Мне нужен результат

[
  {
    "name": "objA",
    "type": "object",
    "items": [
      {
        "value": "valA",
        "name": "A"
      },
      {
        "value": "valB",
        "name": "B"
      },
      {
        "value": "valC",
        "name": "C"
      }
    ]
  },
  {
    "name": "objX",
    "type": "object",
    "items": [
      {
        "value": "valX",
        "name": "X"
      },
      {
        "value": "valY",
        "name": "Y"
      },
      {
        "value": "valZ",
        "name": "Z"
      }
    ]
  }
]

Но он дает результат как -



[
  {
    "name": "objA",
    "type": "object",
    "items": [
      {
        "value": "ValX",
        "name": "A"
      },
      {
        "value": "ValY",
        "name": "B"
      },
      {
        "value": "ValY",
        "name": "C"
      }
    ]
  },
  {
    "name": "objX",
    "type": "object",
    "items": [
      {
        "value": "ValX",
        "name": "X"
      },
      {
        "value": "ValY",
        "name": "Y"
      },
      {
        "value": "ValZ",
        "name": "Z"
      }
    ]
  }
]

Я не могу знаю, где я делаю не так.

Я использую React с машинописным текстом. Мне нужно выполнить указанную выше операцию на основе ответа API. Я предварительно указываю какое-то значение в форме на основе ответа API.

1 Ответ

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

Попробуйте:

subDef.items.forEach((sub)=> {
                    sub.value = node[sub.name].charAt(0).toLowerCase() + node[sub.name].slice(1);
                });

https://jsfiddle.net/j8nwpf6m/

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