我具有如下所示的功能,该功能根据长度参数将数字数组分组。长度表示每个子阵列的最大长度。我试图找出的是一种可以将x => x % 2
从结果变量的声明移入函数的方法。我唯一想到的就是回调,但是我不确定如何做到这一点。感谢您提供任何帮助,如果您发现任何其他冗余代码,请告诉我。
function myFunc(arr, length, fnc) {
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, x => x % 2)
console.log(result1) //[[1, 3], [2, 4]]
const result2 = myFunc([1, 2, 3, 4, 5, 6, 7], 4, x => x % 2)
console.log(result2) //[[1, 3, 5, 7], [2, 4, 6]]
const result3 = myFunc([1, 2, 3, 4, 5], 1, x => x % 2)
console.log(result3) //[[1], [2], [3], [4], [5]]
const result4 = myFunc([1, 2, 3, 4, 5, 6], 4, x => x % 2)
console.log(result4) //[[1, 3, 5], [2, 4, 6]]
Id想要实现的只需要调用Id要创建的数组和子数组的大小。只是对所发生的事情有一个简短的了解,这些数组的基础就是看它们是否可以将完整的数组制作成“长度”的大小,并且任何溢出都会推送到另一个子数组。一个例子如下:
console.log(myfunc([1,2,3,4,5,6,7,8,9,10],3))
这将返回[[1,3,5][2,4,6][7,9][8,10]]
因此,如果有人可以帮助我从console.log语句中删除fnc参数并将其放入函数中,将非常有帮助
您遇到的问题是,您知道此参数将始终相同,因此存在无需每次都写;可以将其烘焙到函数中。
最简单的说,您可以从参数列表中直接取出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]]