Решение:
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;
}
Комментариев нет:
Отправить комментарий