{"id":25022,"date":"2022-12-07T09:22:36","date_gmt":"2022-12-07T03:52:36","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/"},"modified":"2022-12-07T09:22:36","modified_gmt":"2022-12-07T03:52:36","slug":"solved-restructure-javascript-object-by-grouping-and-cartesian-product","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/","title":{"rendered":"[Solved] Restructure Javascript Object by grouping and Cartesian product"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-54344118\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"54344118\" data-parentid=\"54343749\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>First, create an object using the given data and collect the keys and their values.<\/p>\n<pre><code>{\n    A: [1, 2],\n    C: [\"FOO\", \"BAR\"]\n}\n<\/code><\/pre>\n<p>Then, get the Cartesian product of this object.<\/p>\n<blockquote>\n<p>The function <code>getCartesian<\/code> separates all key\/value pairs and builds a new Cartesian product by iterating over the values, if an array with objects call <code>getCartesian<\/code> again, and builds new objects.<\/p>\n<p>This works for nested objects as well.<\/p>\n<p>The algorithm is pretty simple, because it takes any property with a value, not just an array or object, and keeps this value and iterates over all other properties, which are arrays or objects. This algorithm keeps the inner structure and takes only the primitive values as result value for the given structure.<\/p>\n<p>At the beginning, it takes an object\/array, gets all entries and iterates them using an array with an empty object.<\/p>\n<p>An empty array <code>temp<\/code> is the new result.<\/p>\n<p>For creating new elements, the accumulator <code>r<\/code> is iterated and new values are collected. This is the part where the first level of a Cartesian product is made.<\/p>\n<p>For a deeper level, a value is checked as well as &#8220;if an object&#8221;, then a recursive call is made and the new result is taken for the actual key.<\/p>\n<\/blockquote>\n<div class=\"snippet\" data-lang=\"js\" data-hide=\"false\" data-console=\"true\" data-babel=\"false\">\n<div class=\"snippet-code\">\n<pre class=\"snippet-code-js lang-js prettyprint-override\"><code>function getCartesian(object) {\n    return Object.entries(object).reduce((r, [k, v]) =&gt; {\n        var temp = [];\n        r.forEach(s =&gt;\n            (Array.isArray(v) ? v : [v]).forEach(w =&gt;\n                (w &amp;&amp; typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =&gt;\n                    temp.push(Object.assign({}, s, { [k]: x }))\n                )\n            )\n        );\n        return temp;\n    }, [{}]);\n}\n\nvar data = { Values: [{ fieldValue: 1, fieldName: \"A\" }, { fieldValue: 2, fieldName: \"A\" }, { fieldValue: \"FOO\", fieldName: \"C\" }, { fieldValue: \"BAR\", fieldName: \"C\" }] },\n    temp = data.Values.reduce((r, { fieldName, fieldValue }) =&gt; {\n        (r[fieldName] = r[fieldName] || []).push(fieldValue);\n        return r;\n    }, {}),\n    cartesian = getCartesian(temp);\n\nconsole.log(cartesian);<\/code><\/pre>\n<pre class=\"snippet-code-css lang-css prettyprint-override\"><code>.as-console-wrapper { max-height: 100% !important; top: 0; }<\/code><\/pre>\n<\/div>\n<\/div><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">0<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Restructure Javascript Object by grouping and Cartesian product <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] First, create an object using the given data and collect the keys and their values. { A: [1, 2], C: [&#8220;FOO&#8221;, &#8220;BAR&#8221;] } Then, get the Cartesian product of this object. The function getCartesian separates all key\/value pairs and builds a new Cartesian product by iterating over the values, if an array with objects &#8230; <a title=\"[Solved] Restructure Javascript Object by grouping and Cartesian product\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\" aria-label=\"More on [Solved] Restructure Javascript Object by grouping and Cartesian product\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[361,333,356,1510],"class_list":["post-25022","post","type-post","status-publish","format-standard","hentry","category-solved","tag-arrays","tag-javascript","tag-json","tag-lodash"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] First, create an object using the given data and collect the keys and their values. { A: [1, 2], C: [&quot;FOO&quot;, &quot;BAR&quot;] } Then, get the Cartesian product of this object. The function getCartesian separates all key\/value pairs and builds a new Cartesian product by iterating over the values, if an array with objects ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-07T03:52:36+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Restructure Javascript Object by grouping and Cartesian product\",\"datePublished\":\"2022-12-07T03:52:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\"},\"wordCount\":217,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"arrays\",\"javascript\",\"json\",\"lodash\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\",\"name\":\"[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-12-07T03:52:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Restructure Javascript Object by grouping and Cartesian product\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb","og_description":"[ad_1] First, create an object using the given data and collect the keys and their values. { A: [1, 2], C: [\"FOO\", \"BAR\"] } Then, get the Cartesian product of this object. The function getCartesian separates all key\/value pairs and builds a new Cartesian product by iterating over the values, if an array with objects ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/","og_site_name":"JassWeb","article_published_time":"2022-12-07T03:52:36+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Restructure Javascript Object by grouping and Cartesian product","datePublished":"2022-12-07T03:52:36+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/"},"wordCount":217,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["arrays","javascript","json","lodash"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/","url":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/","name":"[Solved] Restructure Javascript Object by grouping and Cartesian product - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-07T03:52:36+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-restructure-javascript-object-by-grouping-and-cartesian-product\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Restructure Javascript Object by grouping and Cartesian product"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/25022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=25022"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/25022\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=25022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=25022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=25022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}