JavaScript中对多维数组(矩阵)去重的实现,可以使用Set数据结构和Array.prototype.map方法相结合实现。相比遍历数组并用indexOf方法实现数组去重,Set结构和map方法的效率更高。下面是实现的步骤:
- 将多维数组转换成一维数组
let arr = [ [1, 2, 3], [2, 3, 4], [3, 4, 5] ];
let flatArr = [].concat(...arr); // [1, 2, 3, 2, 3, 4, 3, 4, 5]
- 使用Set对一维数组去重
let uniqueSet = new Set(flatArr); // Set {1, 2, 3, 4, 5}
- 使用Array.from方法将Set转换为数组
let uniqueArr = Array.from(uniqueSet); // [1, 2, 3, 4, 5]
- 重新组成多维数组
let matrixArr = [ [1, 2, 3], [2, 3, 4], [3, 4, 5] ];
let uniqueMatrixArr = [];
uniqueArr.map(item => {
let uniqueRow = matrixArr.find(row => row.includes(item));
if (uniqueRow) {
uniqueMatrixArr.push(uniqueRow);
}
})
在这个示例中,首先将多维数组转换成一维数组,使用Set对数组去重,然后再将Set转换成数组,这样我们就得到了去重后的值,接下来,我们使用Array.prototype.map()方法来构建新的多维数组。假设我们要构建一个包含所有独立值的多维数组,我们可以遍历独特的值数组,并在原来的多维数组中查找包含该值的行。当找到一个行时,我们将其推送到新的多维数组中。
下面是另一个示例,假设我们要去掉特定索引的重复值:
let arr = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[6, 7, 3],
[8, 9, 4]
];
let uniqueArr = [];
arr.forEach(row => {
let newRow = [];
for (let i = 0; i < row.length; i++) {
if (!newRow.includes(row[i]) && !uniqueArr.some(item => item[i] === row[i])) {
newRow.push(row[i]);
}
}
uniqueArr.push(newRow);
})
在这个示例中,我们使用arr.forEach()
方法遍历每一行,并对每一行使用一个循环来查找重复的值。如果当前值不在当前行的新行中,也没有在独特的行中出现过,我们就将其推送到新行的尾部。最后,我们将新行推送到最终的唯一结果数组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中如何对多维数组(矩阵)去重的实现 - Python技术站