Home > front end >  I have an array that I need to transform in a object (JAVASCRIPT)
I have an array that I need to transform in a object (JAVASCRIPT)

Time:01-27

Well, basically I have an array that has an objects with names and this objects has an array of objects inside, looks likes this:

var array = [
  {articles: [
    {number: "123"},
    {number: "143"},
  ]},
  {paragraph: [
    {number: "197"},
  ]},
]

And I'm really willing to get a object value in return, like this

{articles: [...], paragraph: [...]}

Can someone help me, please?

CodePudding user response:

You could group by the outer properties of the nested objects.

const
    array = [{ articles: [{ number: "123" }, { number: "143" }] }, { paragraph: [{ number: "197" }] }],
    result = array.reduce((r, o) => {
        Object
            .entries(o)
            .forEach(([k, a]) => (r[k] ??= []).push(...a));

        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

CodePudding user response:

Iterate over the array, and use Object.entries to get the keys and values.

const array=[{articles:[{number:"123"},{number:"143"}]},{paragraph:[{number:"197"}]}];

const out = {};

for (const obj of array) {
  const [[key, value]] = Object.entries(obj);
  out[key] = value;
}

console.log(out);

CodePudding user response:

This can be done using an array reducer.

const array = [
  { articles: [{ number: "123" }, { number: "143" }] },
  { paragraph: [{ number: "197" }] },
];

const formatted = array.reduce((accumulator, currentValue) => {
    const [[key, value]] = Object.entries(currentValue);
    return { ...accumulator, [key]: value }
}, {});

console.log(formatted);

What we're doing is initializing our reducer with an empty object on line 9, and iterating over the array. Each time we iterate, we're returning the object with the new key and value appended to the end of it.

CodePudding user response:

let array = [
  {articles: [
    {number: "123"},
    {number: "143"},
  ]},
  {paragraph: [
    {number: "197"},
  ]},
]


let obj = {}
array.forEach(a => {

   if('articles' in a){
       obj.articles = a.articles
   }

   if('paragraph' in a){
       obj.paragraph = a.paragraph
   }
})

console.log(obj)
  •  Tags:  
  • Related