问题描述
我无法再将以下对象与附加 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"}
}
我想计算两个不同的东西:
- 同一位置的 id 多久出现一次(在我的示例中,此对象中的编号为“3”(我希望有一个)
- value2 中的 id 多久出现一次(我希望有两个)。
有人可以帮助我或者可以给我一个很好的提示,我可以如何解决这个问题?我尝试使用过滤器,但我认为我做错了什么:
value1.filter( val1 => val1.includes(id))
然后我没有进一步将它与 value2 进行比较:/
解决方法
首先,filter
方法不能用于 Object
,它是 Array
的属性。
请注意以下是通用解决方案。它将为所有键计数。因此,请根据您的需要使用或修改它。
- 同一位置的 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);
- 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);