1) Нам нужно какое-то logi c (функция), чтобы получить «значение сравнения» каждого объекта. Например, учитывая объект a: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 }
в качестве входных данных, нам нужно значение (строка) '{"boxTop":320,"boxLeft":1750}'
в качестве выходных данных, а затем мы можем использовать эту строку для сравнения с другими значениями.
2) Учитывая значение , например, строка '{"boxTop":320,"boxLeft":1750}'
, нам нужно несколько logi c, чтобы подсчитать, сколько раз это значение появлялось в некоторой коллекции (например, в списке, словаре). Есть много способов решить эту проблему, я решил использовать словарь, в котором 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
*/