HenryDavidTHROW
HenryDavidTHROW

Reputation: 29

add elements of an array javascript

Ok, this might be easy for some genius out there but I'm struggling...

This is for a project I'm working on with a slider, I want an array the slider can use for snap points/increments... I'm probably going about this in a mental way but its all good practice! Please help.

var frootVals = [1,2,3,4,5];
var frootInc = [];

    for (i=0; i<=frootVals.length; i++) {
            if (i == 0){
            frootInc.push(frootVals[i]);
            }
            else{
            frootInc.push(frootInc[i-1] += frootVals[i])
            }
        };

What I'm trying to do is create the new array so that its values are totals of the array elements in frootVals.

The result I'm looking for would be this:

fruitInc = [1,3,6,10,15]

Upvotes: 0

Views: 92

Answers (5)

dandavis
dandavis

Reputation: 16726

Here's a very simple pure functional approach (no vars, side-effects, or closures needed):

[1,2,3,4,5].map(function(a){return this[0]+=a;}, [0]);
// == [1, 3, 6, 10, 15]

if you name and un-sandwich the function, you can use it over and over again, unlike a hard-coded var name, property name, or for-loop...

Upvotes: 0

Segfault
Segfault

Reputation: 8290

For a different take, I like the functional approach:

var frootVals = [1,2,3,4,5];
var frootInc = [];
var acc = 0;
frootVals.forEach(function(i) {
    acc = acc + i;
    frootInc.push(acc);
});

Upvotes: 1

FreeLancr
FreeLancr

Reputation: 36

change your code to:

var frootVals = [1,2,3,4,5];
var frootInc = [frootvals[0]]; //array with first item of 'frootVals' array

for (i=1; i<frootVals.length; i++) {
    frootInc.push(frootInc[i-1] + frootVals[i]); //remove '='
}

Upvotes: 0

undefined
undefined

Reputation: 2214

var frootVals = [1,2,3,4,5]
  , frootInc = [];

// while i < length, <= will give us NaN for last iteration
for ( i = 0; i < frootVals.length; i++) {
    if (i == 0) {
        frootInc.push(frootVals[i]);
    } else {
        // rather than frootIne[ i-1 ] += ,
        // we will just add both integers and push the value
        frootInc.push( frootInc[ i-1 ] + frootVals[ i ] )
    }
 };

There were a few things wrong with your code check out the commenting in my code example. Hope it helps,

Upvotes: 0

Louis XIV
Louis XIV

Reputation: 2224

This will do:

var frootVals = [1,2,3,4,5];
var frootInc = [];

for (i=0; i < frootVals.length; i++) { // inferior to the length of the array to avoid iterating 6 times
    if (i == 0) {
        frootInc.push(frootVals[i]);
    }
    else {
        frootInc.push(frootInc[i-1] + frootVals[i]) // we add the value, we don't reassign values
    }
};

alert(JSON.stringify(frootInc));

jsfiddle here: http://jsfiddle.net/f01yceo4/

Upvotes: 0

Related Questions