2017-07-06 75 views
1

我试图找到一个解决方案来比较javascript中的两个hashmaps,但是我遇到了困难。比较javascript中的两个hashmaps

这是我的情况,我有一个由数组形式的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]] 

第二散列映射是类似于第一,但其值可以含有N-数组的数组。我们的目标是:使用我的第一个hashmap解析第二个hashmap,并首先查找这些键是否相似,如果一旦找到第一个数组中的第一个值,则必须返回“OK”

例如,在这种情况下:它将返回"OK",因为我们可以看到,在第一个HashMap中的key 125和她value包括在125 : [[1 , 2 , 3][0.4 , 4 , 8]]

我不应该只值,而且在按键上

下面是测试另一个例子:

注意,第一散列映射总是具有1个数据(密钥+值)1键+阵列的1维1

第一散列映射:var hashmap1 = { 124 : [ 1,1,1] }

第二散列映射:

var hashmap2 = { 
     123 : [0,0,0], 
     124 : [[ 0,1,1][0,0,1][1,1,1]] 
     125 : [9 , 8 , 7] 
    } 

结果: “OK” ,因为在124 : [[0,1,1] [0,0,1] [1,1,1]]中找到124 : [1,1,1]]。

+0

所以存在,你想看看如果键(一个或多个)从第一个hashmap实际上在第二个,然后检查,看看他们的密钥是否是相同的? – Araymer

+0

就像这个例子:125:第一个hashmap的[1,2,3]包含在125中:[[1,2,3] [0.4,4,8]]。一旦他找到了密钥,他检查它的值是否相同,如果它返回“OK”,如果没有则返回“NO” –

+0

我认为这很难理解,因为我发现自己多次阅读和重读这个问题,并仍然对需求没有完全清楚的理解。也许你可以通过提供5 - 6个预期结果的测试用例来使事情变得更加清晰。 –

回答

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

+0

我想是这样,我稍后再试。现在我在我的手机上......但我的第一个hashmap只包含1个键和1个值......它不会是一个问题? –

+0

不清楚你在问什么 – charlietfl

+0

,我不会得到最终结果,也不是每个人的消息 –