Brian Miller Posted November 23, 2023 Share Posted November 23, 2023 I have an object that looks like the following... rawData = ['Pizza', 'Pepperoni', 'Veggie', 'Hawaiian', 'Coffee', 'Cappuccino', 'Mocha', 'Latte', 'CEOs', 'Tim Cook', 'Mark Zuckerberg', 'Satya Nadella', 'Thanksgiving Food', 'Turkey', 'Cranberry Sauce', 'Pumpkin Pie'] I'd like to convert into the following format using JS, but an not sure how to loop through it... outputData = [ { 'category': 'Pizza', 'example1': 'Pepperoni', 'example2': 'Veggie', 'example3': 'Hawaiian' }, { 'category': 'Coffee', 'example1': 'Cappuccino', 'example2': 'Mocha', 'example3': 'Latte', }, { 'category': 'CEOs', 'example1': 'Tim Cook', 'example2': 'Mark Zuckerberg', 'example3': 'Satya Nadella' }, { 'category': 'Thanksgiving Food', 'example1': 'Turkey', 'example2': 'Cranberry Sauce', 'example3': 'Pumpkin Pie' } ] When you examine the "rawData" object, you'll notice it has 4 sets of data: (Item 1) Category Name. (Items 2, 3 and 4) 3 Examples from that Category. Then the object repeats. In my example, I've included 4 sample data sets but I can imagine there could be an n number of them. I'm awful at loops and this one of driving me nuts! I hope someone can help me. Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/ Share on other sites More sharing options...
0 pmrd Posted November 23, 2023 Share Posted November 23, 2023 (edited) Here's a very simple, easy to read solution. Just use a while loop that runs until the array is empty and splice off 4 items at a time off the array after assigning your values to an new object and pushing it to the output array. No complicated for loops or messy index offsets. let outputData = []; while (rawData.length > 0) { outputData.push({ category: rawData[0], example1: rawData[1], example2: rawData[2], example3: rawData[3] }); rawData.splice(0,4); } If you need the rawData array to remain untouched just clone the array like this and use that array instead. let rawClone = [...rawData]; I have a hard time believing these questions are for personal projects lol Edited November 23, 2023 by PmRd Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865833 Share on other sites More sharing options...
0 Brian Miller Posted November 23, 2023 Author Share Posted November 23, 2023 Thanks! You made it so simple, I didn't think of doing that way. And yes, this is a home project. I'll publish my personal in a few weeks and you'll see. 😉 pmrd 1 Share Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865844 Share on other sites More sharing options...
0 pmrd Posted November 23, 2023 Share Posted November 23, 2023 On 23/11/2023 at 14:44, Brian Miller said: Thanks! You made it so simple, I didn't think of doing that way. And yes, this is a home project. I'll publish my personal in a few weeks and you'll see. 😉 Glad to help Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865845 Share on other sites More sharing options...
0 Brian Miller Posted November 23, 2023 Author Share Posted November 23, 2023 By the way, why did you use "LET" to define the variable, and not a "VAR"? Is there a difference? Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865846 Share on other sites More sharing options...
0 pmrd Posted November 23, 2023 Share Posted November 23, 2023 (edited) On 23/11/2023 at 14:47, Brian Miller said: By the way, why did you use "LET" to define the variable, and not a "VAR"? Is there a difference? Force of habit lol, I usually always work with classes. In this scenario var would work, but if you put that code inside a function that returns the array you're better off using let since it will limit those variables to the scope of the function. I only use var for global variables. Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865847 Share on other sites More sharing options...
0 Brian Miller Posted November 23, 2023 Author Share Posted November 23, 2023 On 23/11/2023 at 13:50, PmRd said: Force of habit lol, I usually always work with classes. In this scenario var would work, but if you put that code inside a function that returns the array you're better off using let since it will limit those variables to the scope of the function. I only use var for global variables. Thank you. I'm learning more and more every day. Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865850 Share on other sites More sharing options...
0 pmrd Posted November 23, 2023 Share Posted November 23, 2023 (edited) You can do neat stuff like this with let, a scope a basically { anything inside brackets }, and yes you can just put plain brackets anywhere you want. { // scope 1 let test = "test 1"; let boop = "boop"; var meep = "meep"; { // scope 2 console.log(boop); //this would return "boop" because this scope is nested therefore it can access variables from its parent scope. console.log(test); //however, this would raise an error because a variable with the same name is declared lower in this scope let test = "test 2"; // this test variable will only exist in scope 2 and doesn't affect test in scope 1 console.log(test); //this would return "test 2" } // scope 2 end console.log(test); //this would return "test 1" because we are back in scope 1 } // scope 1 end console.log(meep); //this would return "meep" because var is always global even when delcared inside a scope console.log(test); //this would raise an error because we are outside scope 1 It's best practice and saves a lot of headaches to use let inside loops and for temporary variables inside a function. Hope this helps! Edited November 23, 2023 by PmRd Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865855 Share on other sites More sharing options...
0 Brian Miller Posted November 23, 2023 Author Share Posted November 23, 2023 It does help thank you. Since I've retired, I've focused on JS. pmrd 1 Share Link to comment https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/#findComment-598865858 Share on other sites More sharing options...
Question
Brian Miller
I have an object that looks like the following...
I'd like to convert into the following format using JS, but an not sure how to loop through it...
When you examine the "rawData" object, you'll notice it has 4 sets of data:
Then the object repeats.
In my example, I've included 4 sample data sets but I can imagine there could be an n number of them.
I'm awful at loops and this one of driving me nuts! I hope someone can help me.
Link to comment
https://www.neowin.net/forum/topic/1435892-javascript-loop-through-object-grouping-every-4-items/Share on other sites
8 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now