Сравнение значений в двух массивах
Начало стандартное: я новичок в 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 шт):
В данном случае, Вам необходимо проверять тип данных, так как Вы переводите всё в строчный вариант.
Либо не делайте этого и сравнивайте точным сравнением через ===, либо проверяйте тип данных.
В данном случае, мы проверяем тип данных каждого элемента массива(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"]));
как-нибудь так еще можно, например.
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);