比较javascript

时间:2017-07-06 16:19:19

标签: javascript

我试图找到一个解决方案来比较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]

2 个答案:

答案 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'))