簡體   English   中英

如何檢查某些值是否同時重復?

[英]how to check if certain values are repeated at the same time?

我有一組值,例如示例中的值,我在 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
 },
]

使用這個 object 數組我需要檢查哪些對象同時重復值“boxLeft”和“boxTop”(在示例中是對象“a”、“d”和“c”)以修改它們添加如果有兩個以上的對象重復值,則該值會增加。

歡迎任何想法。 非常感謝您提前

1)我們需要一些邏輯(函數)來獲得每個object的“比較值”。 例如,給定 object a: { boxTop: 320, boxLeft: 1750, boxHeigth: 245, boxWidth: 310 }作為輸入,我們想要值(字符串) '{"boxTop":320,"boxLeft":1750}'作為 output,然后我們可以使用該字符串與其他值進行比較。

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
    */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM