Add comments to Cartesian Product function.

This commit is contained in:
Oleksii Trekhleb 2018-12-05 06:06:29 +02:00
parent 243be8f2d1
commit 2382225e03

View File

@ -1,15 +1,27 @@
/**
* Generates Cartesian Product of two sets.
* @param {*[]} setA
* @param {*[]} setB
* @return {*[]}
*/
export default function cartesianProduct(setA, setB) { export default function cartesianProduct(setA, setB) {
// Check if input sets are not empty.
// Otherwise return null since we can't generate Cartesian Product out of them.
if (!setA || !setB || !setA.length || !setB.length) { if (!setA || !setB || !setA.length || !setB.length) {
return null; return null;
} }
// Init product set.
const product = []; const product = [];
// Now, let's go through all elements of a first and second set and form all possible pairs.
for (let indexA = 0; indexA < setA.length; indexA += 1) { for (let indexA = 0; indexA < setA.length; indexA += 1) {
for (let indexB = 0; indexB < setB.length; indexB += 1) { for (let indexB = 0; indexB < setB.length; indexB += 1) {
// Add current product pair to the product set.
product.push([setA[indexA], setB[indexB]]); product.push([setA[indexA], setB[indexB]]);
} }
} }
// Return cartesian product set.
return product; return product;
} }