How to add numbers in array using forEach












8















I have an array of arrays which looks like this:



changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];


I want to get the next value in the array by adding the last value



values = [ [1, 2, 3, 2], [1, 0, -1], [1, 2] ];


so far I have tried to use a forEach:



changes.forEach(change => {
let i = changes.indexOf(change);
let newValue = change[i] + change[i + 1]
});


I think I am on the right lines but I cannot get this approach to work, or maybe there is a better way to do it.










share|improve this question









New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

    – Syed Mehtab Hassan
    3 hours ago











  • I want to add the numbers in the array that are next to each other together to make the next number in the array

    – Team Cafe
    3 hours ago











  • This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

    – JollyJoker
    1 hour ago











  • @JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

    – R3tep
    1 hour ago











  • @R3tep You may technically be right, but I think Thomas' version ends up easier to read.

    – JollyJoker
    1 hour ago
















8















I have an array of arrays which looks like this:



changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];


I want to get the next value in the array by adding the last value



values = [ [1, 2, 3, 2], [1, 0, -1], [1, 2] ];


so far I have tried to use a forEach:



changes.forEach(change => {
let i = changes.indexOf(change);
let newValue = change[i] + change[i + 1]
});


I think I am on the right lines but I cannot get this approach to work, or maybe there is a better way to do it.










share|improve this question









New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

    – Syed Mehtab Hassan
    3 hours ago











  • I want to add the numbers in the array that are next to each other together to make the next number in the array

    – Team Cafe
    3 hours ago











  • This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

    – JollyJoker
    1 hour ago











  • @JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

    – R3tep
    1 hour ago











  • @R3tep You may technically be right, but I think Thomas' version ends up easier to read.

    – JollyJoker
    1 hour ago














8












8








8


1






I have an array of arrays which looks like this:



changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];


I want to get the next value in the array by adding the last value



values = [ [1, 2, 3, 2], [1, 0, -1], [1, 2] ];


so far I have tried to use a forEach:



changes.forEach(change => {
let i = changes.indexOf(change);
let newValue = change[i] + change[i + 1]
});


I think I am on the right lines but I cannot get this approach to work, or maybe there is a better way to do it.










share|improve this question









New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have an array of arrays which looks like this:



changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];


I want to get the next value in the array by adding the last value



values = [ [1, 2, 3, 2], [1, 0, -1], [1, 2] ];


so far I have tried to use a forEach:



changes.forEach(change => {
let i = changes.indexOf(change);
let newValue = change[i] + change[i + 1]
});


I think I am on the right lines but I cannot get this approach to work, or maybe there is a better way to do it.







javascript arrays ecmascript-6 foreach






share|improve this question









New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 3 hours ago







Team Cafe













New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 3 hours ago









Team CafeTeam Cafe

412




412




New contributor




Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Team Cafe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.













  • Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

    – Syed Mehtab Hassan
    3 hours ago











  • I want to add the numbers in the array that are next to each other together to make the next number in the array

    – Team Cafe
    3 hours ago











  • This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

    – JollyJoker
    1 hour ago











  • @JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

    – R3tep
    1 hour ago











  • @R3tep You may technically be right, but I think Thomas' version ends up easier to read.

    – JollyJoker
    1 hour ago



















  • Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

    – Syed Mehtab Hassan
    3 hours ago











  • I want to add the numbers in the array that are next to each other together to make the next number in the array

    – Team Cafe
    3 hours ago











  • This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

    – JollyJoker
    1 hour ago











  • @JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

    – R3tep
    1 hour ago











  • @R3tep You may technically be right, but I think Thomas' version ends up easier to read.

    – JollyJoker
    1 hour ago

















Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

– Syed Mehtab Hassan
3 hours ago





Please elaborate this "I want to be able to increment the values based on the next value in the array to get this result:"

– Syed Mehtab Hassan
3 hours ago













I want to add the numbers in the array that are next to each other together to make the next number in the array

– Team Cafe
3 hours ago





I want to add the numbers in the array that are next to each other together to make the next number in the array

– Team Cafe
3 hours ago













This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

– JollyJoker
1 hour ago





This is just a cumulative sum wrapped in .map. The answer by Thomas is better than anything you'll find there though.

– JollyJoker
1 hour ago













@JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

– R3tep
1 hour ago





@JollyJoker Thomas simulate .reduce method, why not use .reduce directly ?

– R3tep
1 hour ago













@R3tep You may technically be right, but I think Thomas' version ends up easier to read.

– JollyJoker
1 hour ago





@R3tep You may technically be right, but I think Thomas' version ends up easier to read.

– JollyJoker
1 hour ago












7 Answers
7






active

oldest

votes


















8














You could save a sum and add the values.






var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
result = array.map(a => a.map((s => v => s += v)(0)));

console.log(result);





By using forEach, you need to take the object reference and the previous value or zero.






var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

console.log(array);








share|improve this answer
























  • That first approach looks nice, but is really inefficient.

    – T.J. Crowder
    2 hours ago











  • but man does it look nice

    – Jeremy Thille
    2 hours ago






  • 1





    @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

    – Thomas
    2 hours ago






  • 1





    @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

    – T.J. Crowder
    2 hours ago








  • 1





    really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

    – Nina Scholz
    2 hours ago





















5














A version with map.






const changes = [
[1, 1, 1, -1],
[1, -1, -1],
[1, 1]
];

const values = changes.map(array => {
let acc = 0;
return array.map(v => acc += v);
});

console.log(values);

.as-console-wrapper{top:0;max-height:100%!important}





And this doesn't change the source Array.






share|improve this answer


























  • Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

    – JollyJoker
    1 hour ago



















2

















const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
let values =
changes.forEach(arr => {
let accu = 0
let nestedArr =
arr.forEach(n => {
accu += n
nestedArr.push(accu)
})
values.push(nestedArr)
})
console.log(values)








share|improve this answer































    2














    You may use map function of Array




    const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
    const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
    console.log(changes);
    console.log(result);





    Update



    Use slice to clone array. This will prevent changes to the original array.






    share|improve this answer










    New contributor




    Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.
















    • 2





      This modifies the source array, which is probably not a good idea.

      – T.J. Crowder
      2 hours ago











    • Yes. And slice will help to prevent that. Thanks for the tip

      – Alexander Yakushev
      2 hours ago



















    1














    New ESNext features of generators are nice for this.



    Here I've created a simple sumpUp generator that you can re-use.






    function* sumUp(a) {
    let sum = 0;
    for (const v of a) yield sum += v;
    }

    const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
    const values = changes.map(a => [...sumUp(a)]);

    console.log(values);








    share|improve this answer

































      0














      Another way, you can use .map to loop your array and use reduce with an array accumulator






      var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
      result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

      console.log(result);








      share|improve this answer

































        0














        Here is an easier to read way that iterates over the outer list of arrays. A copy of the inner array is made to keep the initial values (like [1, 1, 1, -1]). It then iterates over each value in the copied array and adds it to each index after it in the original array.






        var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
        changes.forEach(subArray => {
        var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
        subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
        for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
        subArray[i] += val; // Add the copy's current index value to the original array
        }
        });
        })
        console.log(changes);








        share|improve this answer























          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Team Cafe is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55258925%2fhow-to-add-numbers-in-array-using-foreach%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          7 Answers
          7






          active

          oldest

          votes








          7 Answers
          7






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          8














          You could save a sum and add the values.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          By using forEach, you need to take the object reference and the previous value or zero.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);








          share|improve this answer
























          • That first approach looks nice, but is really inefficient.

            – T.J. Crowder
            2 hours ago











          • but man does it look nice

            – Jeremy Thille
            2 hours ago






          • 1





            @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

            – Thomas
            2 hours ago






          • 1





            @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

            – T.J. Crowder
            2 hours ago








          • 1





            really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

            – Nina Scholz
            2 hours ago


















          8














          You could save a sum and add the values.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          By using forEach, you need to take the object reference and the previous value or zero.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);








          share|improve this answer
























          • That first approach looks nice, but is really inefficient.

            – T.J. Crowder
            2 hours ago











          • but man does it look nice

            – Jeremy Thille
            2 hours ago






          • 1





            @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

            – Thomas
            2 hours ago






          • 1





            @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

            – T.J. Crowder
            2 hours ago








          • 1





            really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

            – Nina Scholz
            2 hours ago
















          8












          8








          8







          You could save a sum and add the values.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          By using forEach, you need to take the object reference and the previous value or zero.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);








          share|improve this answer













          You could save a sum and add the values.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          By using forEach, you need to take the object reference and the previous value or zero.






          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);








          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
          result = array.map(a => a.map((s => v => s += v)(0)));

          console.log(result);





          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);





          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

          array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

          console.log(array);






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 3 hours ago









          Nina ScholzNina Scholz

          192k15104176




          192k15104176













          • That first approach looks nice, but is really inefficient.

            – T.J. Crowder
            2 hours ago











          • but man does it look nice

            – Jeremy Thille
            2 hours ago






          • 1





            @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

            – Thomas
            2 hours ago






          • 1





            @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

            – T.J. Crowder
            2 hours ago








          • 1





            really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

            – Nina Scholz
            2 hours ago





















          • That first approach looks nice, but is really inefficient.

            – T.J. Crowder
            2 hours ago











          • but man does it look nice

            – Jeremy Thille
            2 hours ago






          • 1





            @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

            – Thomas
            2 hours ago






          • 1





            @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

            – T.J. Crowder
            2 hours ago








          • 1





            really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

            – Nina Scholz
            2 hours ago



















          That first approach looks nice, but is really inefficient.

          – T.J. Crowder
          2 hours ago





          That first approach looks nice, but is really inefficient.

          – T.J. Crowder
          2 hours ago













          but man does it look nice

          – Jeremy Thille
          2 hours ago





          but man does it look nice

          – Jeremy Thille
          2 hours ago




          1




          1





          @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

          – Thomas
          2 hours ago





          @T.J.Crowder could you explain or point me in the right direction, why the first approach is inefficient?

          – Thomas
          2 hours ago




          1




          1





          @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

          – T.J. Crowder
          2 hours ago







          @Thomas - Look at all the functions it's creating and executing. Your solution is great -- as concise (way more so than mine) and still efficient.

          – T.J. Crowder
          2 hours ago






          1




          1





          really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

          – Nina Scholz
          2 hours ago







          really, for three items in the outer array? if you really want to speed up the execution, you never use some array methods, instead use nested for loops and create new arrays.

          – Nina Scholz
          2 hours ago















          5














          A version with map.






          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}





          And this doesn't change the source Array.






          share|improve this answer


























          • Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

            – JollyJoker
            1 hour ago
















          5














          A version with map.






          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}





          And this doesn't change the source Array.






          share|improve this answer


























          • Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

            – JollyJoker
            1 hour ago














          5












          5








          5







          A version with map.






          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}





          And this doesn't change the source Array.






          share|improve this answer















          A version with map.






          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}





          And this doesn't change the source Array.






          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}





          const changes = [
          [1, 1, 1, -1],
          [1, -1, -1],
          [1, 1]
          ];

          const values = changes.map(array => {
          let acc = 0;
          return array.map(v => acc += v);
          });

          console.log(values);

          .as-console-wrapper{top:0;max-height:100%!important}






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 2 hours ago









          T.J. Crowder

          694k12212401333




          694k12212401333










          answered 2 hours ago









          ThomasThomas

          5,016159




          5,016159













          • Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

            – JollyJoker
            1 hour ago



















          • Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

            – JollyJoker
            1 hour ago

















          Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

          – JollyJoker
          1 hour ago





          Note that the array of arrays structure is just a needless complication. The question is actually about the cumulative sum of an array. I'd split out the outer mapping function into something called cumulativeSum

          – JollyJoker
          1 hour ago











          2

















          const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
          let values =
          changes.forEach(arr => {
          let accu = 0
          let nestedArr =
          arr.forEach(n => {
          accu += n
          nestedArr.push(accu)
          })
          values.push(nestedArr)
          })
          console.log(values)








          share|improve this answer




























            2

















            const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
            let values =
            changes.forEach(arr => {
            let accu = 0
            let nestedArr =
            arr.forEach(n => {
            accu += n
            nestedArr.push(accu)
            })
            values.push(nestedArr)
            })
            console.log(values)








            share|improve this answer


























              2












              2








              2










              const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
              let values =
              changes.forEach(arr => {
              let accu = 0
              let nestedArr =
              arr.forEach(n => {
              accu += n
              nestedArr.push(accu)
              })
              values.push(nestedArr)
              })
              console.log(values)








              share|improve this answer
















              const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
              let values =
              changes.forEach(arr => {
              let accu = 0
              let nestedArr =
              arr.forEach(n => {
              accu += n
              nestedArr.push(accu)
              })
              values.push(nestedArr)
              })
              console.log(values)








              const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
              let values =
              changes.forEach(arr => {
              let accu = 0
              let nestedArr =
              arr.forEach(n => {
              accu += n
              nestedArr.push(accu)
              })
              values.push(nestedArr)
              })
              console.log(values)





              const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ]
              let values =
              changes.forEach(arr => {
              let accu = 0
              let nestedArr =
              arr.forEach(n => {
              accu += n
              nestedArr.push(accu)
              })
              values.push(nestedArr)
              })
              console.log(values)






              share|improve this answer












              share|improve this answer



              share|improve this answer










              answered 3 hours ago









              holydragonholydragon

              2,64121230




              2,64121230























                  2














                  You may use map function of Array




                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);





                  Update



                  Use slice to clone array. This will prevent changes to the original array.






                  share|improve this answer










                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.
















                  • 2





                    This modifies the source array, which is probably not a good idea.

                    – T.J. Crowder
                    2 hours ago











                  • Yes. And slice will help to prevent that. Thanks for the tip

                    – Alexander Yakushev
                    2 hours ago
















                  2














                  You may use map function of Array




                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);





                  Update



                  Use slice to clone array. This will prevent changes to the original array.






                  share|improve this answer










                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.
















                  • 2





                    This modifies the source array, which is probably not a good idea.

                    – T.J. Crowder
                    2 hours ago











                  • Yes. And slice will help to prevent that. Thanks for the tip

                    – Alexander Yakushev
                    2 hours ago














                  2












                  2








                  2







                  You may use map function of Array




                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);





                  Update



                  Use slice to clone array. This will prevent changes to the original array.






                  share|improve this answer










                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.










                  You may use map function of Array




                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);





                  Update



                  Use slice to clone array. This will prevent changes to the original array.






                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);





                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
                  const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
                  console.log(changes);
                  console.log(result);






                  share|improve this answer










                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  share|improve this answer



                  share|improve this answer








                  edited 2 hours ago





















                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  answered 3 hours ago









                  Alexander YakushevAlexander Yakushev

                  521111




                  521111




                  New contributor




                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.





                  New contributor





                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






                  Alexander Yakushev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.








                  • 2





                    This modifies the source array, which is probably not a good idea.

                    – T.J. Crowder
                    2 hours ago











                  • Yes. And slice will help to prevent that. Thanks for the tip

                    – Alexander Yakushev
                    2 hours ago














                  • 2





                    This modifies the source array, which is probably not a good idea.

                    – T.J. Crowder
                    2 hours ago











                  • Yes. And slice will help to prevent that. Thanks for the tip

                    – Alexander Yakushev
                    2 hours ago








                  2




                  2





                  This modifies the source array, which is probably not a good idea.

                  – T.J. Crowder
                  2 hours ago





                  This modifies the source array, which is probably not a good idea.

                  – T.J. Crowder
                  2 hours ago













                  Yes. And slice will help to prevent that. Thanks for the tip

                  – Alexander Yakushev
                  2 hours ago





                  Yes. And slice will help to prevent that. Thanks for the tip

                  – Alexander Yakushev
                  2 hours ago











                  1














                  New ESNext features of generators are nice for this.



                  Here I've created a simple sumpUp generator that you can re-use.






                  function* sumUp(a) {
                  let sum = 0;
                  for (const v of a) yield sum += v;
                  }

                  const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                  const values = changes.map(a => [...sumUp(a)]);

                  console.log(values);








                  share|improve this answer






























                    1














                    New ESNext features of generators are nice for this.



                    Here I've created a simple sumpUp generator that you can re-use.






                    function* sumUp(a) {
                    let sum = 0;
                    for (const v of a) yield sum += v;
                    }

                    const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                    const values = changes.map(a => [...sumUp(a)]);

                    console.log(values);








                    share|improve this answer




























                      1












                      1








                      1







                      New ESNext features of generators are nice for this.



                      Here I've created a simple sumpUp generator that you can re-use.






                      function* sumUp(a) {
                      let sum = 0;
                      for (const v of a) yield sum += v;
                      }

                      const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                      const values = changes.map(a => [...sumUp(a)]);

                      console.log(values);








                      share|improve this answer















                      New ESNext features of generators are nice for this.



                      Here I've created a simple sumpUp generator that you can re-use.






                      function* sumUp(a) {
                      let sum = 0;
                      for (const v of a) yield sum += v;
                      }

                      const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                      const values = changes.map(a => [...sumUp(a)]);

                      console.log(values);








                      function* sumUp(a) {
                      let sum = 0;
                      for (const v of a) yield sum += v;
                      }

                      const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                      const values = changes.map(a => [...sumUp(a)]);

                      console.log(values);





                      function* sumUp(a) {
                      let sum = 0;
                      for (const v of a) yield sum += v;
                      }

                      const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
                      const values = changes.map(a => [...sumUp(a)]);

                      console.log(values);






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited 2 hours ago

























                      answered 2 hours ago









                      KeithKeith

                      8,9851821




                      8,9851821























                          0














                          Another way, you can use .map to loop your array and use reduce with an array accumulator






                          var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                          result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                          console.log(result);








                          share|improve this answer






























                            0














                            Another way, you can use .map to loop your array and use reduce with an array accumulator






                            var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                            result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                            console.log(result);








                            share|improve this answer




























                              0












                              0








                              0







                              Another way, you can use .map to loop your array and use reduce with an array accumulator






                              var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                              result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                              console.log(result);








                              share|improve this answer















                              Another way, you can use .map to loop your array and use reduce with an array accumulator






                              var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                              result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                              console.log(result);








                              var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                              result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                              console.log(result);





                              var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
                              result = array.map(a => a.reduce((ac, v, i) => [...ac, (ac[i-1] || 0) + v], ));

                              console.log(result);






                              share|improve this answer














                              share|improve this answer



                              share|improve this answer








                              edited 1 hour ago

























                              answered 1 hour ago









                              R3tepR3tep

                              7,90182962




                              7,90182962























                                  0














                                  Here is an easier to read way that iterates over the outer list of arrays. A copy of the inner array is made to keep the initial values (like [1, 1, 1, -1]). It then iterates over each value in the copied array and adds it to each index after it in the original array.






                                  var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                  changes.forEach(subArray => {
                                  var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                  subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                  for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                  subArray[i] += val; // Add the copy's current index value to the original array
                                  }
                                  });
                                  })
                                  console.log(changes);








                                  share|improve this answer




























                                    0














                                    Here is an easier to read way that iterates over the outer list of arrays. A copy of the inner array is made to keep the initial values (like [1, 1, 1, -1]). It then iterates over each value in the copied array and adds it to each index after it in the original array.






                                    var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                    changes.forEach(subArray => {
                                    var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                    subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                    for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                    subArray[i] += val; // Add the copy's current index value to the original array
                                    }
                                    });
                                    })
                                    console.log(changes);








                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      Here is an easier to read way that iterates over the outer list of arrays. A copy of the inner array is made to keep the initial values (like [1, 1, 1, -1]). It then iterates over each value in the copied array and adds it to each index after it in the original array.






                                      var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                      changes.forEach(subArray => {
                                      var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                      subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                      for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                      subArray[i] += val; // Add the copy's current index value to the original array
                                      }
                                      });
                                      })
                                      console.log(changes);








                                      share|improve this answer













                                      Here is an easier to read way that iterates over the outer list of arrays. A copy of the inner array is made to keep the initial values (like [1, 1, 1, -1]). It then iterates over each value in the copied array and adds it to each index after it in the original array.






                                      var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                      changes.forEach(subArray => {
                                      var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                      subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                      for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                      subArray[i] += val; // Add the copy's current index value to the original array
                                      }
                                      });
                                      })
                                      console.log(changes);








                                      var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                      changes.forEach(subArray => {
                                      var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                      subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                      for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                      subArray[i] += val; // Add the copy's current index value to the original array
                                      }
                                      });
                                      })
                                      console.log(changes);





                                      var changes = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];
                                      changes.forEach(subArray => {
                                      var subArrayCopy = subArray.slice(); // Create a copy of the current sub array (i.e. subArrayCopy = [1, 1, 1, -1];)
                                      subArrayCopy.forEach((val, index) => { // Iterate through each value in the copy
                                      for (var i = subArray.length - 1; i > index; i--) { // For each element from the end to the current index
                                      subArray[i] += val; // Add the copy's current index value to the original array
                                      }
                                      });
                                      })
                                      console.log(changes);






                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered 50 mins ago









                                      Nick GNick G

                                      999614




                                      999614






















                                          Team Cafe is a new contributor. Be nice, and check out our Code of Conduct.










                                          draft saved

                                          draft discarded


















                                          Team Cafe is a new contributor. Be nice, and check out our Code of Conduct.













                                          Team Cafe is a new contributor. Be nice, and check out our Code of Conduct.












                                          Team Cafe is a new contributor. Be nice, and check out our Code of Conduct.
















                                          Thanks for contributing an answer to Stack Overflow!


                                          • Please be sure to answer the question. Provide details and share your research!

                                          But avoid



                                          • Asking for help, clarification, or responding to other answers.

                                          • Making statements based on opinion; back them up with references or personal experience.


                                          To learn more, see our tips on writing great answers.




                                          draft saved


                                          draft discarded














                                          StackExchange.ready(
                                          function () {
                                          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55258925%2fhow-to-add-numbers-in-array-using-foreach%23new-answer', 'question_page');
                                          }
                                          );

                                          Post as a guest















                                          Required, but never shown





















































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown

































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown







                                          Popular posts from this blog

                                          How to make a Squid Proxy server?

                                          第一次世界大戦

                                          Touch on Surface Book