0

Excuse the badly composed title, but what I'm asking is this:

Say you have a function like this:

function cartesianProductOf() {
      return Array.prototype.reduce.call(arguments, function(a, b) {
        var ret = [];
        a.forEach(function(a) {
          b.forEach(function(b) {
            ret.push(a.concat([b]));
          });
        });
        return ret;
      }, [[]]);
}

which is to be called like this:

cartesianProductOf([1, 2, 3], [4], [5, 6], ['a','b']);

The problem which I'm facing is that I make a dynamic array and I basically have an array which holds the arguments which should be sent to the function, like this:

var sets = [[1, 2, 3], [4], [5, 6], ['a','b']];

Now, of course, the call:

cartesianProductOf(sets);

will not work. True, I can modify the cartesianProductOf() function easily to this (only important part shown):

function cartesianProductOf() {
    return Array.prototype.reduce.call(arguments[0], function(a, b) {

But I'm wondering is there a way in javascript that I would call cartesianProductOf with sets variable, without having to change the code of cartesianProductOf to accept arguments[0]? Also, I would appreciate the change in title to the more appropriate one (as I've been searching for that keywords around the site, and clearly it's wrong as I couldn't find no relevant info).

2

1 Answer 1

1

As DCoder answered in the comment - I had to use apply method like this:

cartesianProductOf.apply(null, sets)

The difference between apply and call functions in JavaScript is well explained in this SO thread, and to quote:

The main difference is that apply lets you invoke the function with arguments as an array; call requires the parameters be listed explicitly.

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.