Сравнение значений в двух массивах

Начало стандартное: я новичок в JavaScript. Задача: Функция принимает 2 массива с уникальными элементами Функция должна возвращать число элементов, которые содержаться в обеих массивах

Пример:

fourth(['Erlang', 'JavaScript'], ['Go', 'C++', 'Erlang']); // 1

Как это реализовал:

function fourth(arr1, arr2) {

  var count = 0;
  for (var i=0; i<arr1.length; i++){
    for (var j=0; j<arr2.length; j++){
      arr1_to_str = arr1[i].toString();
      arr2_to_str = arr2[j].toString();
      if(arr1_to_str == arr2_to_str) {
          count +=1;
          alert('count = ' + count);
          break;
      }
    }
  }
  return count;

Функция работает, если подать на вход следующие аргументы:

var arr1 = ['Erlang', 'JavaScript'];
var arr2 = ['Go', 'C++', 'Erlang'];

var arr1 = ['incapsulation','OOP','array'];
var arr2 = ['time', 'propert','paralelism','OOP'];

var arr1 = [ true, 3, 9, 11, 15 ];
var arr2 = [ true, 3, 11 ];

И даже с такими (преобразовал оба аргумента в строку):

var arr1 = [1];
var arr2 = [true];

А вот если на вход подать:

var arr1 = [1];
var arr2 = ["1"];

функция возвращает 1, а должно 0, так как 1 не давно "1".

Подскажите, как это можно реализовать. Благодарю.


Ответы (2 шт):

Автор решения: Denis640Kb

В данном случае, Вам необходимо проверять тип данных, так как Вы переводите всё в строчный вариант.
Либо не делайте этого и сравнивайте точным сравнением через ===, либо проверяйте тип данных.
В данном случае, мы проверяем тип данных каждого элемента массива(bz и bz1 и сравниваем их).
Вот пример:

    function fourth(arr1, arr2) {

        var count = 0;
        for (var i = 0; i < arr1.length; i++) {
            var bz = typeof(arr1[i]);
            for (var j = 0; j < arr2.length; j++) {
                var bz1 = typeof(arr2[j]);
                arr1_to_str = arr1[i].toString();
                arr2_to_str = arr2[j].toString();
                if (arr1_to_str == arr2_to_str && bz == bz1) {
                    count += 1;
                    break;
                }
            }
        }
        return count;
    }
    console.log(fourth(['Erlang', 'JavaScript'],['Go', 'C++', 'Erlang']));

    console.log(fourth(['incapsulation','OOP','array'],['time', 'propert','paralelism','OOP']));

    console.log(fourth([ true, 3, 9, 11, 15 ],[ true, 3, 11 ]));
    console.log(fourth([1],[true]));
    console.log(fourth([1],["1"]));

→ Ссылка
Автор решения: teran

как-нибудь так еще можно, например.

function fourth(a,b){
    return a.reduce((acc,av) => acc + b.some(bv => av === bv), 0);
}

var res = fourth(['Erlang', 'JavaScript',1], ['Go', 'C++', 'Erlang',1]);

console.log(res);

→ Ссылка