我试图找到一个解决方案来比较javascript中的两个哈希图,但是我有一个难度。
这是我的情况,我有一个由数组形式的key + value
组成的散列图。
示例:125 : [1 , 2 , 3]
然后我获取这些数据并将其与另一种类型的hashmap进行比较。
示例:
123 : [[1 , 1 , 1][2 , 8.7 , 10]]
124 : [[0 , 0, 5.4][3 , 4 , 5][7, 9.1 , 6]
125 : [[1 , 2 , 3][0.4 , 4 , 8]]
第二个hashmap与第一个类似,但其值可能包含N个数组的数组。目标:使用我的第一个hashmap解析第二个hashmap,首先查找键是否相似,然后如果一旦找到第二个数组中第一个的值,则必须返回“OK”
例如,在这种情况下:它会返回"OK"
,因为我们可以注意到key 125
中包含value
和第一个哈希值中的125 : [[1 , 2 , 3][0.4 , 4 , 8]]
我不仅要测试值,还要测试键
这是另一个例子:
请注意,第一个hashmap总是有1个数据(键+值)1个键+ 1个1维数组
第一个hashmap:var hashmap1 = { 124 : [ 1,1,1] }
第二个hashmap:
var hashmap2 = {
123 : [0,0,0],
124 : [[ 0,1,1][0,0,1][1,1,1]]
125 : [9 , 8 , 7]
}
结果:“确定”,因为在124 : [1,1,1]
[[0,1,1] [0,0,1] 124 :
]中找到[1,1,1]
。
答案 0 :(得分:1)
这是我用来测试两个哈希图是否相等的函数
const hashmapsEqual = (obj1, obj2) => {
const keys1 = Object.keys(obj1), keys2 = Object.keys(obj2);
let match = true;
if(keys1.length !== keys2.length) return false;
for(const key in keys1) { if(obj1[key] !== obj2[key]) match = false; break; }
return match;
}
答案 1 :(得分:0)
比较数组的一种简单方法是对它们进行字符串化,并查看样本是否存在于另一个字符串中
let sample = {
'124': [9,9,9], // expect no match .. key exists but array differs
'125': [1, 2, 3], //expect match
'555':[8,8] // expect no match ... key doesn't exist
}
let data = {
'123': [ [1, 1, 1],[2, 8.7, 10]],
'124': [[0, 0, 5.4],[3, 4, 5],[7, 9.1, 6]],
'125': [[1, 2, 3],[0.4, 4, 8]]
}
let res = Object.keys(sample).map(key => {
let msg = 'OK';
if(!data.hasOwnProperty(key)){
msg= 'No Match';
}else{
let arrayMatch = JSON.stringify(data[key]).indexOf(JSON.stringify(sample[key])) >-1;
msg = !arrayMatch ? 'No Match' : msg;
}
return key + ' : ' + msg;
});
console.log(res.join('\n'))