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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.