/* общие для всех тем */
.navigation { /* style */ }
.sect-one { /* style */ }
.project-title { /* style */ }
/* конкретные для темы evil вдобавок к общим */
body.theme-evil .navigation { /* style */ }
body.theme-evil .sect-one { /* style */ }
body.theme-evil .project-title { /* style */ }
/* конкретные для темы hacker вдобавок к общим */
body.theme-hacker .navigation { /* style */ }
body.theme-hacker .sect-one { /* style */ }
body.theme-hacker .project-title { /* style */ }
/* ..... */
$(document).ready(function() {
var themes = ['evil', 'hacker', 'basic'];
var oldTheme = 'basic';
themes.forEach(function(theme) {
$('#' + theme).click(function() {
$('body').removeClass('theme-' + oldTheme);
$('body').addClass('theme-' + theme);
oldTheme = theme;
});
});
});
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;
}