实现思路
- 扁平化多层嵌套数组:使用迭代器(
Iterator
)和for...of
循环来遍历多层嵌套数组,将所有元素提取到一个一维数组中。
- 实现通用累加器函数:通过高阶函数,将自定义的累加逻辑作为回调函数传入累加器函数,在扁平化后的数组上执行该逻辑。
代码实现
// 扁平化多层嵌套数组
function flattenArray(arr) {
let result = [];
for (let item of arr) {
if (Array.isArray(item)) {
result = result.concat(flattenArray(item));
} else {
result.push(item);
}
}
return result;
}
// 通用累加器函数
function accumulator(arr, callback) {
let sum = 0;
for (let num of arr) {
sum += callback(num);
}
return sum;
}
// 示例自定义累加逻辑:累加所有奇数元素
function sumOdd(num) {
return num % 2 === 1 ? num : 0;
}
// 示例自定义累加逻辑:累加元素的对数
function sumLog(num) {
return Math.log(num);
}
let nestedArray = [[1, 2], [3, [4, 5]], 6];
let flatArray = flattenArray(nestedArray);
// 累加奇数元素
let oddSum = accumulator(flatArray, sumOdd);
// 累加元素的对数
let logSum = accumulator(flatArray, sumLog);
console.log("扁平化数组:", flatArray);
console.log("奇数元素和:", oddSum);
console.log("元素对数和:", logSum);
可维护性和扩展性优势
- 可维护性:
- 代码逻辑清晰,
flattenArray
函数专注于扁平化数组,accumulator
函数专注于执行累加操作,职责单一,易于理解和维护。
- 自定义的累加逻辑(如
sumOdd
和sumLog
)作为独立的函数,使得修改和调试特定的累加逻辑更加方便。
- 扩展性:
- 只需定义新的回调函数,就能轻松扩展
accumulator
函数的功能,实现不同的累加操作,无需修改accumulator
函数本身的代码。
- 同样,若需要改变扁平化数组的方式,只需修改
flattenArray
函数,而不会影响到累加操作的逻辑。