0

I am trying to created customized object from another object however I want to make it dynamic.

I have one object as below

{
    docType: "Produce",
    PRODUCEID: "PRFAINAPCH0005",
    PRODUCE: "Sweetcorn",
    PRODUCEQUANTITES: [{
        name: "Madhuri",
        qty: 4000
    }],
    FARMLOCATION: "Plot 56",
    PLANTINGDATE: "2020-10-01T04:00:00.000Z",
    GAPINFO: {},
    FARMERID: "FAINAPCH0001",
    STATUS: "Approved",
    BASE_UNIT: "kg",
    SELECTED_UNIT: {
        NAME: "kg"
    },
} 

I want make another object like below

{
  BusinessData: {
    PRODUCEQUANTITES: [{
      name: "Madhuri",
      qty: 4000
    }],
    FARMLOCATION: "Plot 56",
    GAPINFO: {},
    PLANTINGDATE: "2020-10-01T04:00:00.000Z",
    BASE_UNIT: "kg",
    SELECTED_UNIT: {
      NAME: "kg"
    },
    FARMERID: "FAINAPCH0001"
  },
  PRID: "PRFAINAPCH0005",
  docType: "Produce",
  PRODUCE: "Sweetcorn",
  STATUS: "Approved"
}

In that object except "PRODUCEID", "PRODUCE", "docType" and "STATUS" all attribute will go inside the "BusinessData" attribute which is object inside main object.

I am tried using below code which is not good way to do as it is make code as static I want to make it dynamic as except "PRODUCEID", "PRODUCE", "docType" and "STATUS" all attribute go inside "BusinessData" attribute. Thanks in advance.

var myparam = {
    "BusinessData": {}
};
myparam.PRID = param.PRODUCEID
myparam.docType = param.docType
myparam.PRODUCE = param.PRODUCE
myparam.STATUS = param.STATUS
myparam.BusinessData.PRODUCEQUANTITES = param.PRODUCEQUANTITES
myparam.BusinessData.FARMLOCATION = param.FARMLOCATION
myparam.BusinessData.GAPINFO = param.GAPINFO
myparam.BusinessData.PLANTINGDATE = param.PLANTINGDATE
myparam.BusinessData.BASE_UNIT = param.BASE_UNIT
myparam.BusinessData.SELECTED_UNIT = param.SELECTED_UNIT
myparam.BusinessData.FARMERID = param.FARMERID

console.log("myparam", myparam);

2 Answers 2

1

Make an object of mappings that contain special properties, then loop through the keys:

function convertObject(obj) {
    const mappings = {
        PRODUCEID: "PRID",
        docType: "docType",
        PRODUCE: "PRODUCE",
        STATUS: "STATUS"
    };
    const ret = {BusinessData: {}};
    for (const key in obj) {
        if (key in mappings) {
            ret[mappings[key]] = obj[key];
        } else {
            ret.BusinessData[key] = obj[key];
        }
    }
    return ret;
}

This utilizes a for...in loop.

Sign up to request clarification or add additional context in comments.

Comments

1

You can destructure and restructure the object. The rest syntax will take care of the other proerties.

const object = {
  docType: "Produce",
  PRODUCEID: "PRFAINAPCH0005",
  PRODUCE: "Sweetcorn",
  PRODUCEQUANTITES: [{
    name: "Madhuri",
    qty: 4000
  }],
  FARMLOCATION: "Plot 56",
  PLANTINGDATE: "2020-10-01T04:00:00.000Z",
  GAPINFO: {},
  FARMERID: "FAINAPCH0001",
  STATUS: "Approved",
  BASE_UNIT: "kg",
  SELECTED_UNIT: {
    NAME: "kg"
  },
}

const change = ({
  PRODUCEID,
  docType,
  PRODUCE,
  STATUS,
  ...BusinessData //`...` to collect everything else
}) => ({
  PRID: PRODUCEID, //Rename PRODUCEID to PRID
  docType,
  PRODUCE,
  STATUS,
  BusinessData
})

console.log(change(object))

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.