//b列和c列的值不允许重复,如果重复,获得两个重复数值的位置
//下面每个属性的位置是
//(0,0) (0,1) (0,2)
//(1,0) (1,1) (1,2)
//(2,0) (2,1) (2,2)
let form = [
{ a: 1, b: 2, c: 1 },
{ a: 3, b: 1, c: 2 },
{ a: 2, b: 2, c: 2 },
]
题目如上图,有什么好的方法推荐吗,感觉要写很多遍历不太好
//b列和c列的值不允许重复,如果重复,获得两个重复数值的位置
//下面每个属性的位置是
//(0,0) (0,1) (0,2)
//(1,0) (1,1) (1,2)
//(2,0) (2,1) (2,2)
let form = [
{ a: 1, b: 2, c: 1 },
{ a: 3, b: 1, c: 2 },
{ a: 2, b: 2, c: 2 },
]
题目如上图,有什么好的方法推荐吗,感觉要写很多遍历不太好
参考GPT和自己的思路:
可以使用一个对象来记录每个重复的值出现的位置。具体实现步骤如下:
定义一个空对象 repeatPositions = {}
用来记录重复值出现的位置。
使用 for 循环遍历每一行对象,并记录重复的值出现的位置:
a. 判断是否已经存在与当前行中 b、c 列相同的值,如果不存在,则将其保存在对象中,值为一个包含当前位置信息的数组。
b. 如果该值已经存在于对象中,则将当前位置信息(行和列)添加到对应的位置信息数组中。
再次遍历对象,将每一个值对应位置信息数组的长度为 2 的值输出即为重复值的位置信息。
代码如下:
let form = [
{ a: 1, b: 2, c: 1 },
{ a: 3, b: 1, c: 2 },
{ a: 2, b: 2, c: 2 },
]
let repeatPositions = {};
for(let i=0; i<form.length; i++) {
let row = form[i];
if(repeatPositions[row.b] === undefined) {
repeatPositions[row.b] = [{row: i, col: 1}];
} else {
repeatPositions[row.b].push({row: i, col: 1});
}
if(repeatPositions[row.c] === undefined) {
repeatPositions[row.c] = [{row: i, col: 2}];
} else {
repeatPositions[row.c].push({row: i, col: 2});
}
}
for(let val in repeatPositions) {
if(repeatPositions[val].length === 2) {
console.log(`重复值 ${val} 的位置信息为:`);
console.log(`(${repeatPositions[val][0].row}, ${repeatPositions[val][0].col})`);
console.log(`(${repeatPositions[val][1].row}, ${repeatPositions[val][1].col})`);
}
}
输出结果为:
重复值 2 的位置信息为:
(0, 1)
(2, 1)
重复值 1 的位置信息为:
(0, 2)
(1, 1)
注意:此代码只满足题目中要求的 b、c 列不能重复的情况。如果要求 a、b、c 列都不能重复,可以使用类似的方法继续扩展代码。