javascript - Logik för kombination av element från två arrayer (Javascript/Typescript)
Två arrayformat nämns här
const arr1 = [
{
"elementName": "one"
},
{
"elementName": "two"
}
]
const arr2 = [
{
"type": "RPT_PROPERTY_DEMOGRP",
"values": [
{
"label": "HH"
},
{
"label": "HH1"
}
]
},
{
"type": "RPT_PROPERTY_PLAYBACK_TYPE",
"values": [
{
"label": "WW"
},
{
"label": "WW1"
}
]
}
]
Jag behöver en kombination för dessa två som
'en HH WW'
'en HH WW1'
'en HH1 WW'
'en HH1 WW1'
'två HH WW'
'två HH WW1'
'två HH1 WW'
'två HH1 WW1'
Hur man skriver logik för detta i js eller ts
Svar #1
Du kan använda en iterativ och rekursiv metod.
const
cartesian = (a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []),
arr1 = [{ elementName: "one" }, { elementName: "two" }]
arr2 = [{ type: "RPT_PROPERTY_DEMOGRP", values: [{ label: "HH" }, { label: "HH1" }] }, { type: "RPT_PROPERTY_PLAYBACK_TYPE", values: [{ label: "WW" }, { label: "WW1" }] }],
result = [
arr1.map(({ elementName }) => elementName),
...arr2.map(({ values }) => values.map(({ label }) => label))
].reduce(cartesian);
console.log(result.map(a => a.join(' ')));.as-console-wrapper { max-height: 100% !important; top: 0; }Svar #2
Du letar efter ett kartesiskt produkt: https://eddmann.com/posts/cartesian-product-in-javascript/
const set1 = arr1.map(elt => elt.elementName);
const set2 = arr2.map(elt => elt.values.map(val => val.label));
const dataSet = [set1, ...set2];
dataSet.reduce((acc, set) => acc.map(x => set.map(y => [x, y].flatten())).flatten())
