【问题标题】:how to check if certain values are repeated at the same time?如何检查某些值是否同时重复?
【发布时间】:2020-05-05 14:06:28
【问题描述】:

我有一个值数组,如示例中的值,我在 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”)来修改他们添加了一个值,如果有两个以上的对象重复值,则该值会增加。

欢迎任何想法。 提前非常感谢您

【问题讨论】:

    标签: arrays for-loop object key-value


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多