JavaScript如何实现支持任意维度的多维数组元素乘算并设上限的方法
优化实现方案
递归版(通用易维护)
核心思路是判断当前遍历的元素是否为数组:如果是就递归调用函数处理子数组,否则直接执行乘法+上限裁剪逻辑,天然适配任意维度的数组,后续新增维度不需要修改任何代码:
const MultArrFunction = (arr, m, cap) => { return arr.map(item => { if (Array.isArray(item)) { return MultArrFunction(item, m, cap); } // 直接取乘积和上限的较小值,等效于原逻辑的if判断 return Math.min(m * item, cap); }); };
迭代版(避免递归栈溢出)
如果你的数组维度极高(超过JS引擎的递归栈上限,常规业务场景几乎不会遇到),可以用深度优先遍历的迭代写法实现:
const MultArrFunction = (arr, m, cap) => { // 深拷贝原数组避免修改原始数据 const result = JSON.parse(JSON.stringify(arr)); const stack = [result]; while (stack.length) { const current = stack.pop(); for (let i = 0; i < current.length; i++) { if (Array.isArray(current[i])) { stack.push(current[i]); } else { current[i] = Math.min(m * current[i], cap); } } } return result; };
内容的提问来源于stack exchange,提问作者Rewind
相关产品推荐
相关产品推荐

