# [RESOLVED] Function with multiple parameters as parameter

• 07-10-2013, 04:34 PM
mao3
[RESOLVED] Function with multiple parameters as parameter
I want to do functional programming in javascript.
Code:

```function forEach(array, function) {   var newArray = new Array();   for(var i=0; i < array.length; i++)   {     newArray[i] = function(this[i]);   }   return newArray; }```
If I have a function like isNumber(x) that returns true if x is a number, then I can use the function written above to apply the isNumber function to an array.
Code:

```var arr = [1, 2, "three", 4, "five"]; var boolArr = forEach(arr, isNumber); //boolArr = [true, true, false, true, false]```
But what if I want to apply a function that has multiple parameters? For example sum(a,b) that adds a and b and I would want that function to add all numbers in an array. Or maybe a function like isBetween(x,a,b) that would return true if x is between a and b and I want to be able to do something like forEach(array, isBetween(a,b)) which would check if each element is between a and b. Is there a way to do this?
• 07-10-2013, 06:39 PM
red566
sorry i am sort of new to all this but "&&" is and eg
if (A == 1 && B == 1) "this will only run if A == 1 AND B == 1"

also "||" is or eg
if (C == 1 || D == 1) "this will run if C == 1 and/or D == 1"
• 07-11-2013, 03:41 PM
Kever
A 'forEach' function normally works on the array passed to it. The function you have which returns a new array, is usually called a 'map' function.
Chapter 6 of http://eloquentjavascript.net/ explains some nice tricks on functional programming.

As a way to solve your questions.
Code:

``` function forEach(array, action){   for(var i=0; i<array.length; i++){   action.call(this, array[i], i);   }  };  function reduce(combine, base, array){   forEach(array,function(element){   base = combine(base ,element);   });   return base;  };  function map(func, array){   var result = [];   forEach(array, function(element, i){   result.push(func(element, i));   });   return result;  };  function asArray(quasiArray, start){   return Array.prototype.splice.call(quasiArray, start)  };  function partial(func) {   var fixedArgs = asArray(arguments, 1);   return function(){   return func.apply(null, fixedArgs.concat(asArray(arguments, 0)));   };  };  function add(a, b){   return a+b;  };  function isBetween(a, b, x){   return x>a && x<b;  };  var sum = reduce(add, 0, [1,2,3]);  var between = map(partial(isBetween, 3, 7), [1,2,3,4,5,6,7,8,9]);  document.write(sum + '<hr>' +between);```

## X vBulletin 4.2.2 Debug Information

• Page Generation 0.08656 seconds
• Memory Usage 2,359KB
• Queries Executed 11 (?)
Template Usage (20):
• (3)bbcode_code_printable
• (1)footer
• (1)gobutton
• (1)navbar_moderation
• (1)navbar_noticebit
• (2)option
• (1)spacer_close
• (1)spacer_open

Phrase Groups Available (3):
• global
• postbit
Included Files (19):
• ./global.php
• ./includes/class_bootstrap.php
• ./includes/init.php
• ./includes/class_core.php
• ./includes/config.php
• ./includes/functions.php
• ./includes/class_friendly_url.php
• ./includes/class_hook.php
• ./includes/class_bootstrap_framework.php
• ./vb/vb.php
• ./vb/phrase.php
• ./includes/functions_calendar.php
• ./includes/class_bbcode_alt.php
• ./includes/class_bbcode.php
• ./includes/functions_bigthree.php
• ./includes/functions_notice.php

Hooks Called (41):
• init_startup
• init_startup_session_setup_start
• database_pre_fetch_array
• database_post_fetch_array
• init_startup_session_setup_complete
• global_bootstrap_init_start
• global_bootstrap_init_complete
• cache_permissions
• fetch_foruminfo
• global_state_check
• global_bootstrap_complete
• global_start
• style_fetch
• global_setup_complete
• bbcode_fetch_tags
• bbcode_create
• bbcode_parse_start
• cache_templates
• cache_templates_process
• template_register_var
• template_render_output
• fetch_template_start
• fetch_template_complete
• parse_templates