-1

Guys this is the most complicated things that i've ever met. So, i have an array looks like this. I have an array that consist of Object that also consist of array who had items of name, and value.

I wanted to extract the value from the array and merged it with the keys, and then group it into an object.

[
    {
    "Penunjang Kerja": [
        {
            "name": "Penunjang Kerja",
            "value": "0"
        }
    ],
    "Kesehatan": [
        {
            "name": "Kesehatan",
            "value": "0"
        }
    ],
    "Ngawur": [
        {
            "name": "Ngawur",
            "value": "0"
        }
    ],
    "Sukidayo": [
        {
            "name": "Sukidayo",
            "value": "0"
        }
    ]
},
{
    "Penunjang Kerja": [
        {
            "name": "Penunjang Kerja",
            "value": "0"
        }
    ],
    "Kesehatan": [
        {
            "name": "Kesehatan",
            "value": "0"
        }
    ],
    "Ngawur": [
        {
            "name": "Ngawur",
            "value": "0"
        }
    ],
    "Sukidayo": [
        {
            "name": "Sukidayo",
            "value": "0"
        }
    ]
},
{
    "Penunjang Kerja": [
        {
            "name": "Penunjang Kerja",
            "value": "0"
        }
    ],
    "Kesehatan": [
        {
            "name": "Kesehatan",
            "value": "0"
        }
    ],
    "Ngawur": [
        {
            "name": "Ngawur",
            "value": "0"
        }
    ],
    "Sukidayo": [
        {
            "name": "Sukidayo",
            "value": "0"
        }
    ]
     },
   ]

I want my array to become looks like this

{ "Penunjang Kerja": [0, 0, 1, 0], //value
   "Kesehatan": [0, 0, 0, 0],
    ...rest
 }

Does anyone can help me ? Iam using lodash so, i think that might help

1
  • lodash is handy for sure, but it's a layer of extra code to load and while it might help temporarily, it's very helpful to learn how to accomplish these things with vanilla JS Commented Sep 11, 2022 at 19:30

1 Answer 1

2

The result here doesn't match what you've typed out as the expected result, but the logic is sound and your expected result has some extra data in it. You can use Array.reduce as an iterator, and then an Array.forEach loop on the object keys to extract the value.

let result = data.reduce((b, a) => {
  Object.keys(a).forEach(o => {
    b[o] = b[o] || [];
    b[o].push(a[o][0].value)
  });
  return b
}, {})

let data = [{
    "Penunjang Kerja": [{
      "name": "Penunjang Kerja",
      "value": "0"
    }],
    "Kesehatan": [{
      "name": "Kesehatan",
      "value": "0"
    }],
    "Ngawur": [{
      "name": "Ngawur",
      "value": "0"
    }],
    "Sukidayo": [{
      "name": "Sukidayo",
      "value": "0"
    }]
  },
  {
    "Penunjang Kerja": [{
      "name": "Penunjang Kerja",
      "value": "0"
    }],
    "Kesehatan": [{
      "name": "Kesehatan",
      "value": "0"
    }],
    "Ngawur": [{
      "name": "Ngawur",
      "value": "0"
    }],
    "Sukidayo": [{
      "name": "Sukidayo",
      "value": "0"
    }]
  },
  {
    "Penunjang Kerja": [{
      "name": "Penunjang Kerja",
      "value": "0"
    }],
    "Kesehatan": [{
      "name": "Kesehatan",
      "value": "0"
    }],
    "Ngawur": [{
      "name": "Ngawur",
      "value": "0"
    }],
    "Sukidayo": [{
      "name": "Sukidayo",
      "value": "0"
    }]
  },
]


let result = data.reduce((b, a) => {
  Object.keys(a).forEach(o => {
    b[o] = b[o] || [];
    b[o].push(a[o][0].value)
  });
  return b
}, {})

console.log(result)

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

1 Comment

Thanks a lot @Kingslish , you are a lifesaver here. i really not familiar with reduce, maybe i should read more the docs.

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.