I have an array like so with a single object inside:
FirstArray = [{ "category": "None", "ARFE": 553.5, "BV": 900, "RF rfeer": 0, ..... }]
I want to convert it so that every key-value pair (where the value is a number) in the object is in its own object like the following:
NewArray = [{ name: "ARFE", value: 553.05 }, { name: "BV", value: 900 }, { name: "RF rfeer", value: 0 }, .....]
Here, each key was assigned a new key called name, and the value for the original key was assigned a new key called value. Those pairs are then put into their own object inside the array.
Note that “category”: “None” is not its own object in the array since “None” is non-numerical.
It’s also important to note that there could be many key-value pairs, so it’s not just limited to the items above (e.g., “ARFE”: 553.5, etc.)
What I have so far:
I know you can separate a single object into multiple objects:
NewArray = Object.entries(FirstArray).reduce((prev, [og, nw]) => { let [name, value] = og.match(/D+|d+$/g) prev[value] = { ...(prev[value] || {}), [name]: nw } return prev; }, {})
I also know how that you can create a new object with new keys like so:
NewArray = Object.assign( ...Object.entries(FirstArray).map(([key, value]) => ({ [key]: name })) );
However, I’m having trouble putting everything together. How would I be able to achieve NewArray from FirstArray?
Advertisement
Answer
You were pretty close. All you needed to do is specify the name:
const data = { "category": "None", "ARFE": 553.5, "BV": 900, "RF rfeer": 0 }; const result = Object .entries(data) .filter(([_, value]) => typeof value === 'number') .map(([key, value]) => ({ name: key, value })); console.log(result);
Also, if you don’t want { "name": "category", "value": "None" }
to be included in the result, you can just filter it:
const result = Object .entries(data) .filter(([ key ]) => key !== 'category') .map(([key, value]) => ({ name: key, value }));