These are chat archives for **camperbot/bonfire-return-largest-numbers-in-arrays**

bf details

```
function largestOfFour(arr) {
// You can do this!
return arr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
```

Return an array consisting of the largest number from each provided sub-array. For simplicity, the provided array will contain exactly 4 sub-arrays.Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .

If you are writing your own Chai.js tests, be sure to use a deep equal statement instead of an equal statement when comparing arrays.

Remember to use RSAP if you get stuck. Try to pair program. Write your own code.

links:

hint

`hint [1/8]`

Make sure you've tried to hard to solve it yourself before proceeding. :construction:

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [2/8]`

You will get an array that contains sub arrays of numbers and you need to return an array with the largest number from each of the sub arrays.

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [3/8]`

You will need to keep track of the array with the answer and the largest number of each sub-array.

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [4/8]`

You can work with multidimensional arrays by `Array[Index][SubIndex]`

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [5/8]`

Pay close attention to the timing of the storing of variables when working with loops

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [6/8]`

**Solutions ahead!**

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [7/8]`

```
function largestOfFour(arr) {
var results = [];
for (var n = 0; n < arr.length; n++) {
var largestNumber = 0;
for (var sb = 0; sb < arr[n].length; sb++) {
if (arr[n][sb] > largestNumber) {
largestNumber = arr[n][sb];
}
}
results[n] = largestNumber;
}
return results;
}
```

- Create a variable to store the results as an array.
- Create an outer loop to iterate through the main array.
- Before going into the inner loop, create a variable to hold the largest number. This must be outside the inner loop.
- Create another for loop to work with the sub-arrays.
- Check if the element of the sub array is larger than the current largest number. If so, then save the number.
- After the inner loop, save the largest number in the variable for the results.

type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]

hint

`hint [8/8]`

```
function largestOfFour(arr) {
// You can do this!
// Yes, I can. :P
return arr.map(Function.apply.bind(Math.max, null));
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
```

- The
`Function.apply.bind(Math.max, null)`

makes a new function accepting the`arr.map`

values i.e. the inner arrays.

Now the new function needs to find the max of the input inner array.

- So we want to create a function that does the work of
`Math.max`

and accepts input as an array.

e.g. wouldn't be nice if the `Math.max`

would be accepting inputs like this:`Math.max([9, 43, 20, 6]); // 43`

.

- To do the work of accepting params as array, there is this
`Function.apply`

method but it*invokes*the*context*function.

i.e. `Math.max.apply(null, [9, 43, 20, 6]); // 43`

would invoke the `Max.max`

method.

Here we're passing

`null`

as thecontextof the`Function.apply`

method as`Math.max`

doesn't need any context.

But that's not useful for `arr.map`

which accepts a function value. So we create a function value using `Function.bind`

method.

- Since,
`Function.apply`

is a static*method*of`Function`

Object, so we can call`Function.prototype.bind`

on`Function.apply`

i.e.`Function.apply.bind`

.

Now we pass the *context* for `Function.apply.bind`

call i.e. `Math.max`

method as the 1st argument which would give us the functionality of `Math.max`

method.

- Since
`Function.apply`

method takes a context as it's 1st argument, hence, we need to pass a bogus*context*for`Function.apply`

method.- So, we pass
`null`

as the 2nd param to`Function.apply.bind`

which gives a*context*to the`Math.max`

method. - Since,
`Math.max`

is independent of any*context*, hence, it ignores the bogus*context*given by`Function.apply`

method call.

- So, we pass

**So in the end we get a function (using Function.bind method) that works like Math.max but accepts params as an array like Function.apply** :smiley:

*comprendido*? :neutral_face:

NOTE: This is an advanced solution. NOT FOR BEGINNERS.

**Reference:-**

- http://devdocs.io/#q=js+Math+max
- http://devdocs.io/#q=js+Array+map
- http://devdocs.io/#q=js+Function+apply
- http://devdocs.io/#q=js+Function+bind

If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @abhisekp`

NOTE:Please add your username only if you have added anyrelevant main contentsto the wiki page. (Please don't remove any existing usernames.)type

`hint`

for next hint :pencil: [Contribute at the FCC Wiki]