let data = [];
let currentRow = 0;
function getPositions(){
document.querySelectorAll('.row').forEach(row => {
let box = row.getBoundingClientRect();
data.push(box.top + pageYOffset);
});
}
getPositions();
document.addEventListener('wheel', event => {
event.preventDefault();
currentRow += event.deltaY > 0 ? 1 : -1;
if (currentRow<0) currentRow = 0;
if (currentRow>data.length-1) currentRow = data.length-1;
window.scrollTo({
top: data[currentRow],
behavior: 'smooth'
});
});
window.addEventListener('resize', () => {
getPositions();
});
const getPairsWithSumFromArr = (arr, sum) => {
let map = {},
res = [];
for (let i=0; i < arr.length; i++) {
const currEl = arr[i];
if (map[currEl] !== undefined) {
res.push([map[currEl], currEl]);
} else {
map[sum - currEl] = currEl;
}
}
return res;
}
const f = (a, sum) => a.reduce((r, x, i) => r.concat(a.slice(i+1).filter(y => x + y == sum).map(y => [x, y])), [])
Но для больших объёмов данных это вряд ли будет эффективно, скорее всего, самое обычное решение с двумя вложенными циклами будет работать шустрее и менее затратно по памяти, чем в цикле гонять массив через slice/filter/map. В лоб это как-то так:const f = (a, sum) => {
const l = a.length;
let r = [];
for (let i = 0; i < l-1; i++)
for (let j = i+1; j < l; j++)
if (a[i] + a[j] == sum)
r.push([a[i], a[j]]);
return r;
}
var a = 0;
console.log(a++)
var a = 0;
console.log(++a)