Выводить массив, где элементы суммы массивов без первого элемента
const arrPartSums=[0, 1, 3, 6, 10]
for (let i of arrPartSums) {
arrPartSums.shift(1)
console.log('arr ', sum=arrPartSums)
}
Добрый день подскажите как возращать не новые массивы а их сумму элементов
Хочу услышать отвер советом или кодом
Я вывожу массивы где выводится изначальный массив только без первого элемента - и так по цыклу
Ответы (2 шт):
Автор решения: xydope
→ Ссылка
let arg = [1, 3, 4, 5];
const fn = (arr) => arr.reduce((acc, item, index) =>
[...acc, arr.slice(index, arr.length).reduce((acc, deepItem) =>
acc + deepItem, 0)], [])
console.log(fn(arg))
Автор решения: OPTIMUS PRIME
→ Ссылка
UPD: Я тут кое-что проверил...
for (let i = 0; i < 10; i++ ) {
console.log(test1(), test2());
}
function test1() {
let start = performance.now();
let arr = [];
for (let i = 0; i < 20000; i++) {
arr.unshift(i);
}
return "unshft: " + (performance.now() - start).toFixed(3);
}
function test2() {
let start = performance.now();
let arr = [];
for (let i = 0; i < 20000; i++) {
arr.push(i);
}
arr.reverse();
return "push + reverse: " + (performance.now() - start).toFixed(3);
}
Оказалось, делать unshift на каждой итерации (который каждый раз должен сдвинуть индексы всех остальных элементов) - примерно в 100 раз дороже, чем push + один раз .reverse() в конце.
let arr = [1, 2, 3, 4, 5];
let result = [], sum = 0;
for (let i = arr.length - 1; i >= 0; i-- ) {
result.push( sum += arr[i] );
}
console.log( JSON.stringify( result.reverse() ) );
Старый ответ (не подумал, что unshift - тоже неявный цикл):
Если ходить по массиву справа налево, можно обойтись одним проходом, и таскать с собой переменную, храняющую текущую сумму:
let arr = [1, 2, 3, 4, 5];
let result = [], sum = 0;
for (let i = arr.length - 1; i >= 0; i-- ) {
result.unshift( sum += arr[i] );
}
console.log( JSON.stringify(result) );