JS - 比较具有附加 ID 的对象

问题描述

我无法再将以下对象与附加 ID 进行比较:

let id = 123
conterForCompareObjects = 0
conterForHitsValue2 = 0

value1: {
  '0': [999],'3': [123]
}
value2: {
  '0': {id: 999,something: "ABC"},'1': {id: 000,something: "DEF"},'2': {id: 123,something: "GHI"},'3': {id: 123,something: "JKL"}
}

我想计算两个不同的东西:

  1. 同一位置的 id 多久出现一次(在我的示例中,此对象中的编号为“3”(我希望有一个
  2. value2 中的 id 多久出现一次(我希望有两个)。

有人可以帮助我或者可以给我一个很好的提示,我可以如何解决这个问题?我尝试使用过滤器,但我认为我做错了什么:

value1.filter( val1 => val1.includes(id))

然后我没有进一步将它与 value2 进行比较:/

解决方法

首先,filter 方法不能用于 Object,它是 Array 的属性。

请注意以下是通用解决方案。它将为所有键计数。因此,请根据您的需要使用或修改它。

  1. 同一位置的 id 多久出现一次(在我的示例中,此对象中的编号为“3”(我希望有一个)

命中数将始终为 1,因为我们只检查 ID 是否存在于两个对象中。

let compareMap = new Map();
let conterForCompareObjects = new Map();

for(let postion in value1){
  let id = value1[position][0];
  compareMap.set(position,id);
}

for(let position in value2){
  let id1 = compareMap.get(position);
  if(id1 !== undefined){
   let id2 = value2[position]['id'];
    if(id2 === id1){
      conterForCompareObjects.set(id2,1);
    } else conterForCompareObjects.set(id2,0); // or don't,in that case it's `undefined`
  }
}

let someID = <SOME ID IN value2>
let hitForSomeID = conterForCompareObjects.get(someID);

  1. value2 中的 id 多久出现一次(我希望有两个)。
let conterForHitsValue2 = new Map();

for(let position in value2){
  let id = value2[position]['id'];
  let count = conterForHitsValue2.get(id);
  if(count === undefined){
    conterForHitsValue2.set(id,0);
  } else {
    conterForHitsValue2.set(id,count + 1);
  }
}

let someID = <SOME ID IN value2>
let hitForSomeID = conterForHitsValue2.get(someID);