简体   繁体   中英

ES6 Object Mapping

I was working on something but stuck at a point where I have inputs as -

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

The output I need is

[
  {
    "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"
      }
    ]
  }
]

But it gives the output as -



[
  {
    "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"
      }
    ]
  }
]

I am not able to know where I am doing wrong.

I am using React with typescript. I need to perform the above operation based on some API response. I am prepopulating some value in the form based on the API response.

Try:

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

https://jsfiddle.net/j8nwpf6m/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM