39

I have the following string

output_string = "[10, 10, [1,2,3,4,5], [10,20,30,40,50]]"

Then I JSON.parse it

my_args = JSON.parse(output_string)

How do I unpack it in a Python-like way so that every element in my_args becomes an argument to a JavaScript function?

some_javascript_function(*my_args)
// should be equivalent to:
some_javascript_function(my_args[0],my_args[1],my_args[2],my_args[3])
// or:
some_javascript_function(10, 10, [1,2,3,4,5], [10,20,30,40,50])

Is there a core JavaScript idiom that does that?

3
  • Duplicate of stackoverflow.com/questions/3422458/… Commented Aug 16, 2011 at 11:45
  • @arunkumar, this answer to that question looks interesting, which makes this a slightly different question. Can we do that for function arguments? Commented Aug 16, 2011 at 11:50
  • My apologies, you are right. It is not a duplicate. And there seems to be a way to do this in the answer below. I will remove the earlier comment, since its not relevant. Commented Aug 16, 2011 at 11:56

3 Answers 3

42

Once you 've collected the function arguments in an array, you can use the apply() method of the function object to invoke your predefined function with it:

   some_javascript_function.apply(this, my_args)

The first parameter (this) sets the context of the invoked function.

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

2 Comments

.apply works well, but .call doesn't quite hit it with an Array argument. Thanks, you've pointed me in the right direction. This article, Function apply and function call in JavaScript looks interesting.
Note this won't work for console.log.apply(...). That should use console.log.apply(console, arguments). See this question.
41

You can achieve that by doing this some_javascript_function(...my_args)

This is called spread operation (as unpacking is in python). view docs here https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator

Comments

13

Unpack using "..."

The same way you accept unlimited args, you can unpack them.

let vals = [1, 2, 'a', 'b'];

console.log(vals);    // [1, 2, "a", "b"]
console.log(...vals); // 1 2 "a" "b"

Example: Accept unlimited arguments into a function

It will become a list

const someFunc = (...args) => {
    console.log(args);    // [1, 2, "a", "b"]
    console.log(args[0]); // 1
    console.log(...args); // 1 2 "a" "b"
}

someFunc(1, 2, 'a', 'b');

Example: Send list of arguments into a function

const someFunc = (num1, num2, letter1, letter2) => {
    console.log(num1);    // 1
    console.log(letter1); // "a"
}

let vals = [1, 2, 'a', 'b'];
someFunc(...vals);

Send arguments

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.