@mvr1976
Учу html, css, js

Почему не работает сравнение элементов массивов?

Добрый день!
Пожалуйста, помогите разобраться. Написал функцию, она сравнивает 2 элемента массива (строки), определяет все ли буквы из второго массива есть в составе первого, если все - возвращает true. Если во втором массиве есть другие буквы -возвращает false.
Все работает, но, как говорится, есть один момент: сравнение аргументов ["hello", "neo"] выдает true. Против всякого здравого смысла и против прямой проверки(см. комментарии в коде). В чем фокус?
function mutation(arr) {
var arr1 = arr.splice(1,1);
var arr1 = arr1.join('').toLowerCase().split('');
var arr = arr.join('').toLowerCase().split('');
var x;
//console.log(arr.indexOf(arr1[i]));//проверка выдает -1, т.е. ключ, на который должен возвращаться false/
for(var i = 0; i < arr1.length; i++){	
	if(arr.indexOf(arr1[i]) === -1){
		 x = false;
	}else if(arr.indexOf(arr1[i]) > -1){
		 x = true;
		
	}
}
return x;
}

mutation(["hello", "neo"], "");
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
@Aves
Когда проверяется последняя буква — 'o', x становится true, ведь такая буква в 'hello' есть. Минимальное исправление сделать так:
for(var i = 0; i < arr1.length; i++){	
  if(arr.indexOf(arr1[i]) === -1){
     return false;
  }
}
return true;

А вообще можно покрасивее сделать:
function mutation(arr) {
    return Array.prototype.every.call(arr[1], (e) => ~arr[0].indexOf(e));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы