I have a array object with mixed type of key values. i need to separate it with type of key value pair.
[ { TOOL_PM: "ETX29405-PM1", fcbmaxsum: 223.49, fcbmaxsumperfeat: 74.5, numfeat: 3 }, { TOOL_PM_x: "ETX29304-PM7", TOOL_PM_y: "ETX29304-PM7", fcbmax: 289.76, fcmax: 2.03, globalSelection: "No", innerSelection: "No", variable: "AdjustedPressure_Step1_SKW" }, { TOOL_PM: "ETX29405-PM2", fcbmaxsum: 260.49, fcbmaxsumperfeat: 8.5, numfeat: 2 }, { TOOL_PM_x: "ETX29304-PM1", TOOL_PM_y: "ETX29304-PM1", fcbmax: 209.76, fcmax: 1.04, globalSelection: "No", innerSelection: "No", variable: "ChamberManometerAdjustedPressure_Step1_SKW" } ]
I need to split it the above object separately as per type. as like below
Array Object 1
[ { TOOL_PM: "ETX29405-PM1", fcbmaxsum: 223.49, fcbmaxsumperfeat: 74.5, numfeat: 3 }, { TOOL_PM: "ETX29405-PM2", fcbmaxsum: 260.49, fcbmaxsumperfeat: 8.5, numfeat: 2 } ]
Array Object 2
[ { TOOL_PM_x: "ETX29304-PM7", TOOL_PM_y: "ETX29304-PM7", fcbmax: 289.76, fcmax: 2.03, globalSelection: "No", innerSelection: "No", variable: "AdjustedPressure_Step1_SKW" }, { TOOL_PM_x: "ETX29304-PM1", TOOL_PM_y: "ETX29304-PM1", fcbmax: 209.76, fcmax: 1.04, globalSelection: "No", innerSelection: "No", variable: "ChamberManometerAdjustedPressure_Step1_SKW" } ]
As like above. I need to achieve it by java script. I have tried it with forEach condition. but i am not achieve the result. Thanks in Advance.
Advertisement
Answer
First, you need to be able to check if the object is of type A or type B.
For instance :
let o = { TOOL_PM: "ETX29405-PM1", fcbmaxsum: 223.49, fcbmaxsumperfeat: 74.5, numfeat: 3 }; function isTypeA(ob) { return typeof ob.TOOL_PM !== 'undefined'; } function isTypeB(ob) { return typeof ob.TOOL_PM_x !== 'undefined'; }
Here, I decided to check the existence of the property TOOL_PM
or TOOL_PM_x
. But it’s a business decision that you have to make.
Then, you iterate thought the array, check the current object and put it in the right output array :
let all = [ /* ... */]; let allTypeA = []; let allTypeB = []; all.forEach(o => { if(isTypeA(o)) { allTypeA.push(o); } else if(isTypeB(o)) { allTypeB.push(o); } else { /* Warning : unknown object type */ } });
When you reach a programming issue, break it into simpler things. Rewriting your issue with other inputs sometimes helps to resolve it.