如何快速将二维矩阵的行截断至指定长度?
需求与解决方案
原二维数组
array = [ [11,22,33,44], [66,26,73,94,67,89,22], [21,55,23,77,43,99,99,3,6] ]
需求
实现一个函数,传入指定长度n后,返回每行长度均为n的二维数组。例如n=3时,输出应为:
array = [ [11,22,33], [66,26,73], [21,55,23] ]
问题代码
你尝试的代码因手动固定元素索引,无法适配任意n的需求:
for(i=0;i<array.length;i++) { newarray.push([array[i][0], array[i][0],array[i][1]]) } console.log(newarray)
快速实现方法
简洁版(推荐)
利用数组原生的map和slice方法,一行逻辑即可完成:
function trimArrayToLength(arr, n) { return arr.map(row => row.slice(0, n)); } // 调用示例 const array = [ [11,22,33,44], [66,26,73,94,67,89,22], [21,55,23,77,43,99,99,3,6] ]; const result = trimArrayToLength(array, 3); console.log(result);
map遍历原数组的每一行slice(0, n)直接截取每行的前n个元素;若原行长度小于n,则返回完整原行(无需额外判断)
兼容老环境的循环版
如果需要适配不支持箭头函数的旧环境,可以用普通循环实现:
function trimArrayToLength(arr, n) { const newArray = []; for (let i = 0; i < arr.length; i++) { const trimmedRow = []; const currentRow = arr[i]; // 循环截取前n个元素,同时避免超出原行长度 for (let j = 0; j < n && j < currentRow.length; j++) { trimmedRow.push(currentRow[j]); } newArray.push(trimmedRow); } return newArray; }
内容的提问来源于stack exchange,提问作者Code Guy
相关产品推荐
相关产品推荐

