我有一个像例子中那样的值数组,我在for循环中通过它来设置某些条件,但我到了一个点,我不知道如何检查重复的值。
const objectsData:[
a:{boxTop = 320,
boxLeft = 1750,
boxHeigth = 245,
boxWidth = 310
},
b:{boxTop = 20,
boxLeft = 580,
boxHeigth = 245,
boxWidth = 310
},
c:{boxTop = 320,
boxLeft = 1750,
boxHeigth = 245,
boxWidth = 310
},
d:{boxTop = 320,
boxLeft = 1750,
boxHeigth = 245,
boxWidth = 310
},
e:{boxTop = 136,
boxLeft = 10,
boxHeigth = 245,
boxWidth = 310
},
]
以这个对象数组,我需要检查哪些对象重复的值 "boxLeft "和 "boxTop "在同一时间(在这个例子中,将是对象 "a","d "和 "c"),以修改它们添加一个值,将增加的情况下,有两个以上的对象,重复的值。
任何想法是欢迎的.Thank you very much in advance.
1)我们需要一些逻辑(函数)来获取每个对象的 "比较值"。例如,给定对象 a: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 }
,作为输入,我们想要的值(字符串) '{"boxTop":320,"boxLeft":1750}'
作为输出,然后我们就可以使用该字符串与其他值进行比较。
2) 给定一个值,例如字符串 '{"boxTop":320,"boxLeft":1750}'
,我们需要一些逻辑来统计这个值在某个集合(比如列表、字典)中出现了多少次。有很多方法可以解决这个问题,我决定使用一个字典,其中的 key
代表某个数值,而 value
表示该键在集合中出现的次数。
这里有一个JavaScript(节点)的实现,因为你的名字里有javascript。
const objectsData = {
a: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 },
b: { boxTop: 20, boxLeft: 580, boxHeigth: 245, boxWidth: 310 },
c: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 },
d: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 },
e: { boxTop: 136, boxLeft: 10, boxHeigth: 245, boxWidth: 310 },
};
function getBoxLeftAndBoxTop(obj) {
const { boxTop, boxLeft } = obj;
return JSON.stringify({ boxTop, boxLeft });
}
const counterBoxLeftAndBoxTop = {};
for (const key of Object.keys(objectsData)) {
const box = getBoxLeftAndBoxTop(objectsData[key]);
const currentCount = counterBoxLeftAndBoxTop[box];
counterBoxLeftAndBoxTop[box] = currentCount ? currentCount + 1 : 1;
}
console.log(counterBoxLeftAndBoxTop);
/* Outputs:
{
'{"boxTop":320,"boxLeft":1750}': 3,
'{"boxTop":20,"boxLeft":580}': 1,
'{"boxTop":136,"boxLeft":10}': 1
}
*/
console.log(`Objects that appears 2 or more times: `);
for (const key of Object.keys(objectsData)) {
const box = getBoxLeftAndBoxTop(objectsData[key]);
const currentCount = counterBoxLeftAndBoxTop[box];
if (currentCount >= 2) {
console.log(key);
}
}
/* Outputs:
Objects that appears 2 or more times:
a
c
d
*/