Решение:
var isHashSubset = function(a, b){ var f = true; for(var id in b){ if(b.hasOwnProperty(id)){ if(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))){ f = false; } } } if(!f){ f = true; for(var id in a){ if(a.hasOwnProperty(id)){ if(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))){ f = false; } } } } return f; } var x = {'key1':'val1','key2':'val2', 'key3':'val3'}; var y = {'key1':'val1','key2':'val2'}; console.log('Result:', isHashSubset(x,y) ); // TRUE console.log('Result:', isHashSubset(y,x) ); // TRUE var x = {'key1':'val1','key2':'val2', 'key3':'val3'}; var y = {'key1':'val1','key4':'val4'}; console.log('Result:', isHashSubset(x,y) ); // FALSE console.log('Result:', isHashSubset(y,x) ); // FALSE
Значения null не будут учитываться, для того чтобы учитывать их также, нужно вместо условия (обоих условиях):
(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))) использовать: (!((id in a)&&(id in b)&&(b[id]==a[id])))
Усовершенствованный вариант:
var isHashSubset = function(a, b, c){ var f = true, c = c || 0; // количество рекурсивных вызовов for(var id in b){ if( b.hasOwnProperty(id) && !( undefined!=a[id] && undefined!=b[id] && b[id]==a[id] ) ){ f = false; } } return (!f && c == 0) ? isHashSubset(b, a, 1) : f; }
Комментариев нет:
Отправить комментарий