JS技术实现:如何统计二维数组中列的唯一元素数量?
问题:如何改写代码统计二维数组列的唯一元素数量
现有一段用于统计二维数组行唯一元素数量的JavaScript代码,如何修改它来统计列的唯一元素数量?例如目标数组的第一列(索引0)唯一元素为E、F、B,数量是3。
原代码如下:
let arr = [["E", "D", "E", "E", "C"], ["E", "A", "C", "E", "C"], ["F", "B", "C", "D", "G"], ["B", "C", "G", "G", "F"], ["E", "C", "E", "B", "C"]]; for (let i = 0; i < arr.length; i++) { // 统计行的唯一元素数量 let uniqueElements = arr[i].filter((elem, index) => arr[i].indexOf(elem) === index).length; // (i = 0) uniqueElements = 3 ( E, D, C ) // (i = 1) uniqueElements = 3 ( E, A, C ) // (i = 2) uniqueElements = 5 ( F, B, C, D, G ) // (i = 3) uniqueElements = 4 ( B, C, G, F ) // (i = 4) uniqueElements = 3 ( E, C, B ) }
解决方案
要统计列的唯一元素,关键是先把每一列的元素单独提取出来,再用类似原代码的逻辑统计唯一值数量。具体实现如下:
修改思路
- 确定数组的列数:因为原数组是矩形结构,直接取第一行的长度
arr[0].length即可。 - 遍历每一列的索引,对每个索引,提取该列的所有元素。
- 用原代码的过滤逻辑(或更高效的
Set方式)统计该列的唯一元素数量。
修改后的代码(沿用原逻辑)
let arr = [["E", "D", "E", "E", "C"], ["E", "A", "C", "E", "C"], ["F", "B", "C", "D", "G"], ["B", "C", "G", "G", "F"], ["E", "C", "E", "B", "C"]]; // 获取总列数(假设所有行长度一致) const columnCount = arr[0].length; for (let col = 0; col < columnCount; col++) { // 提取当前列的所有元素 const columnElements = arr.map(row => row[col]); // 用原代码的过滤逻辑统计唯一元素数量 let uniqueCount = columnElements.filter((elem, index) => columnElements.indexOf(elem) === index).length; // 打印结果 console.log(`列 ${col} 的唯一元素数量:${uniqueCount}`); // 对应结果:列0→3,列1→4,列2→3,列3→4,列4→4 }
更高效的实现方式(使用Set)
如果数组规模较大,用Set统计唯一值的性能更优,代码也更简洁:
let arr = [["E", "D", "E", "E", "C"], ["E", "A", "C", "E", "C"], ["F", "B", "C", "D", "G"], ["B", "C", "G", "G", "F"], ["E", "C", "E", "B", "C"]]; const columnCount = arr[0].length; for (let col = 0; col < columnCount; col++) { const columnElements = arr.map(row => row[col]); // 利用Set自动去重的特性,直接获取size即为唯一元素数量 let uniqueCount = new Set(columnElements).size; console.log(`列 ${col} 的唯一元素数量:${uniqueCount}`); }
内容的提问来源于stack exchange,提问作者Paski7
相关产品推荐
相关产品推荐

