How to add numbers in array using forEach
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
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.
|
show 3 more comments
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
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.reducemethod, 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
|
show 3 more comments
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
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
javascript arrays ecmascript-6 foreach
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.
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.reducemethod, 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
|
show 3 more comments
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.reducemethod, 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
|
show 3 more comments
7 Answers
7
active
oldest
votes
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);
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 nestedforloops and create new arrays.
– Nina Scholz
2 hours ago
|
show 4 more comments
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.
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 calledcumulativeSum
– JollyJoker
1 hour ago
add a comment |
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)add a comment |
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.
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. Andslicewill help to prevent that. Thanks for the tip
– Alexander Yakushev
2 hours ago
add a comment |
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);add a comment |
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);add a comment |
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);add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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);
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 nestedforloops and create new arrays.
– Nina Scholz
2 hours ago
|
show 4 more comments
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);
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 nestedforloops and create new arrays.
– Nina Scholz
2 hours ago
|
show 4 more comments
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);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);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 nestedforloops and create new arrays.
– Nina Scholz
2 hours ago
|
show 4 more comments
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 nestedforloops 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
|
show 4 more comments
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.
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 calledcumulativeSum
– JollyJoker
1 hour ago
add a comment |
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.
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 calledcumulativeSum
– JollyJoker
1 hour ago
add a comment |
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.
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}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 calledcumulativeSum
– JollyJoker
1 hour ago
add a comment |
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 calledcumulativeSum
– 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
add a comment |
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)add a comment |
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)add a comment |
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)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)answered 3 hours ago
holydragonholydragon
2,64121230
2,64121230
add a comment |
add a comment |
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.
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. Andslicewill help to prevent that. Thanks for the tip
– Alexander Yakushev
2 hours ago
add a comment |
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.
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. Andslicewill help to prevent that. Thanks for the tip
– Alexander Yakushev
2 hours ago
add a comment |
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.
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);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.
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. Andslicewill help to prevent that. Thanks for the tip
– Alexander Yakushev
2 hours ago
add a comment |
2
This modifies the source array, which is probably not a good idea.
– T.J. Crowder
2 hours ago
Yes. Andslicewill 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
add a comment |
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);add a comment |
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);add a comment |
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);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);edited 2 hours ago
answered 2 hours ago
KeithKeith
8,9851821
8,9851821
add a comment |
add a comment |
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);add a comment |
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);add a comment |
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);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);edited 1 hour ago
answered 1 hour ago
R3tepR3tep
7,90182962
7,90182962
add a comment |
add a comment |
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);add a comment |
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);add a comment |
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);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);answered 50 mins ago
Nick GNick G
999614
999614
add a comment |
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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
.reducemethod, 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