Проблема в том, что вы знаете, что этот параметр всегда будет одним и тем же, поэтому нет необходимости писать его каждый раз; его можно просто встроить в функцию.
В самом простом случае вы можете буквально просто взять fnc
из списка параметров и объявить его вручную как переменную, всегда устанавливая одно и то же значение:
function myFunc(arr, length) {
let fnc = x => x % 2;
groups = [];
result = [];
for (let val of arr) {
x = fnc(val);
if (!groups[x]) {
groups[x] = [];
}
if (!groups[x].length) {
result .push(groups[x]);
}
groups[x].push(val);
if (groups[x].length === length) {
groups[x] = [];
}
}
return result ;
}
//examples
const result1 = myFunc([1, 2, 3, 4], 2)
console.log(result1) //[[1, 3], [2, 4]]
const result2 = myFunc([1, 2, 3, 4, 5, 6, 7], 4)
console.log(result2) //[[1, 3, 5, 7], [2, 4, 6]]
const result3 = myFunc([1, 2, 3, 4, 5], 1)
console.log(result3) //[[1], [2], [3], [4], [5]]
const result4 = myFunc([1, 2, 3, 4, 5, 6], 4)
console.log(result4) //[[1, 3, 5], [2, 4, 6]]
На этом этапе на самом деле нет почти никакого смысла в том, чтобы fnc
была функцией. Каждый раз это одна и та же операция. Просто возьмите эту операцию и вставьте ее вместо вызова функции. Кроме того, вы всегда должны использовать let
или const
для объявления вещей, а не просто назначать их без ключевого слова объявления - это делает их глобальными, и они могут неожиданно взаимодействовать с вашим глобальным пространством имен. Наконец, я настоятельно прошу вас переименовать вашу функцию так, чтобы она описывала то, что она делает. Это поможет каждому, кто читает ваш код, понять его более интуитивно, включая ваше будущее.
Вот как все это будет выглядеть:
function splitArray(arr, length) {
let groups = [];
let result = [];
for (let val of arr) {
let x = val % 2; //this does the same thing
if (!groups[x]) {
groups[x] = [];
}
if (!groups[x].length) {
result.push(groups[x]);
}
groups[x].push(val);
if (groups[x].length === length) {
groups[x] = [];
}
}
return result;
}
//examples
const result1 = splitArray([1, 2, 3, 4], 2)
console.log(result1) //[[1, 3], [2, 4]]
const result2 = splitArray([1, 2, 3, 4, 5, 6, 7], 4)
console.log(result2) //[[1, 3, 5, 7], [2, 4, 6]]
const result3 = splitArray([1, 2, 3, 4, 5], 1)
console.log(result3) //[[1], [2], [3], [4], [5]]
const result4 = splitArray([1, 2, 3, 4, 5, 6], 4)
console.log(result4) //[[1, 3, 5], [2, 4, 6]]