2015-07-20 3 views
0

Я полагаю, что у меня есть три массива:JavaScript ассоциированных массивы сравнение

dict['tag'] = 'INPUT'; 
dict['type'] = 'checkbox'; 
dict['name'] = 'remember' 

dict2['tag'] = 'INPUT2'; 
dict2['type'] = 'checkbox'; 
dict2['name'] = 'remember'; 

dict3['type'] = 'checkboxEdit'; 
dict3['name'] = 'remember' 
dict3['tag'] = 'INPUT3'; 

Теперь то, что я хочу добиться того, что я хочу знать, сколько элементы массивов равны, даже если массивы не сортируются, так, например,

function(dict, dict2) return 2 //cause input values are not the same 
function(dict, dict3) return 1 //cause name values are the same 
function(dict2, dict3) return 1 //cause name values are the same 

Что является наиболее эффективным способом достижения этого? Также можно изменить структуру данных, поэтому, если есть что-то лучше, дайте мне знать.

+1

JavaScript не имеет "ассоциативные массивы." Он имеет * объекты *. (Это поможет с поиском.) –

+0

* «Также можно изменить структуру данных, если есть что-то лучше, дайте мне знать». * Вероятно, вам будет лучше с массивом объектов, например. '[{tag: 'INPUT', введите: 'checkbox', name: 'remember'}, {'tag:' INPUT2 ',' type ':' checkbox ', name:' remember '}, ...]' (Что такое «INPUT2»?) –

+0

Input2 недействительный тег, sry для этого :), но давайте предположим, что это div :) –

ответ

1

Это довольно просто НАСТОЯЩЕМУ ..

var dict = {}, dict2 = {}, dict3 = {}; 
 

 
dict['tag'] = 'INPUT'; 
 
dict['type'] = 'checkbox'; 
 
dict['name'] = 'remember' 
 

 
dict2['tag'] = 'INPUT2'; 
 
dict2['type'] = 'checkbox'; 
 
dict2['name'] = 'remember'; 
 

 
dict3['type'] = 'checkboxEdit'; 
 
dict3['name'] = 'remember' 
 
dict3['tag'] = 'INPUT3'; 
 

 
function compare(d1, d2) { 
 
    var count = 0; 
 
    Object.keys(d1).forEach(function (k) { 
 
     if(d1[k] === d2[k]) count++; 
 
    }); 
 
    return count; 
 
} 
 

 
alert(compare(dict, dict2)); 
 
alert(compare(dict, dict3)); 
 
alert(compare(dict2, dict3));

Смежные вопросы