Каким способом решить эту задачу?

186
06 декабря 2021, 06:00

В метод даю массив который состоит из нечетных(четных) чисел, но 1 из чисел четный(нечетный) в каждом массиве. Метод должен вернуть единственное четное(нечетное) число заданного массива соответственно. Я всякие методы массива использовала чтобы решить задачу. Но не получилось.

P.S. Пожалуйста не пишите готовое решение, просто дайте подсказку чтоб сама смогла решить.

function Outlier(){ 
  
  this.method=function(arr) 
  { 
     
    for(let i=0; i<arr.length; i++){ 
      
    
    if(arr[i]%2==0){ 
     return arr[i]%2!=0; //Проблема больше всего вот здесь 
    } 
      
   if(arr[i]%2!=0){ 
     return arr[i]%2==0; //Проблема .... И здесь 
    } 
 
  } 
 
  } } 
   
let array1=[11, 3, 5, 9, 29, 4]; 
let array2=[2, 4, 6, 180, 7]; 
 
let outlier=new Outlier(); 
 
let out=outlier.method(array1); 
//  outlier.method(array2); 
console.log(out);

Version 2

function Outlier(){ 
  
  this.method=function (arr) 
  { 
     
    for(let i=0; i<arr.length; i++){ 
      
    
   
 
  if(arr[0]%2==0&&arr[1]%2==0||arr[2]%2==0) 
  return "even" 
 
  if(arr[0]%2!=0&&arr[1]%2!=0||arr[2]%2!=0) 
  return "odd" 
 
  }   
   
  } } 
   
let array1=[3, 4, 5, 9, 29]; 
 let array2=[7, 2, 4, 6, 180]; 
 
 
let outlier=new Outlier(); 
 
let out=outlier.method(array1); 
let out1= outlier.method(array2); 
console.log(out); //odd 
console.log(out1); //even

В этом let array2=[7, 2, 4, 6, 180]; массиве вне зависимости где находится нечетный элемент if(arr[0]%2==0&&arr[1]%2==0||arr[2]%2==0) return "even" правильно работает

А в этом let array1=[3, 4, 5, 9, 29]; массиве когда четный элемент имеет индекс [2] if(arr[0]%2!=0&&arr[1]%2!=0||arr[2]%2!=0) return "odd" неправильно работает Почему так?

Version 3 Проверка - что есть минимум 3 элемента и что нет строк. Там конечно не проверка на содержание любой строки(только заданной).

function Outlier(){ 
    this.method=function(arr) { 
      if(arr.length>=3&&arr.join(" ").search(/ab*c/)==-1){ 
        let reminder = (arr[0]+arr[1])%2==1 ? 1-arr[2]%2 : 1-arr[0]%2; 
        for(let i=0; i<arr.length; i++){         
            if(arr[i]%2==reminder){ 
                return arr[i]; 
            } 
        } 
     } 
    else{ 
      return `Array's length <3 or Array has the string(s).  
 Please add number(s) to the array or delete the string(s)`; 
    } 
    } 
} 
 
let array1=[11, 3, 5,"cbbabbbbcdebc,", 9, 29, 4]; 
let array2=[2, 4, 6, 180, 7, 20]; 
let outlier=new Outlier(); 
let out=outlier.method(array1); 
console.log(out); 
out=outlier.method(array2); 
console.log(out);

Version 4 Проверка каждого элемента массива - что нет строк и что есть минимум 3 элемента в массиве

function Outlier(){ 
    this.method=function(arr) { 
  
      for(let i=0; i<arr.length; i++){ 
   if(arr.length>=3&&arr.join(" ").search(/ab*c/)==-1)    { 
 
     let reminder = (arr[0]+arr[1])%2==1 ? 1-arr[2]%2 : 1-arr[0]%2; 
        for(let i=0; i<arr.length; i++){   
   
            if(arr[i]%2==reminder){ 
                return arr[i]; 
            } 
        } 
             
          }   
 
          else{ 
            return `Array's length <3 or Array has the string(s).  
 Please add number(s) to the array or delete the string(s)`; 
 
          } 
  } 
      
     } 
     
    } 
 
 
let array1=[11, 3, 5,"cbbabbbbcdebc,", 9, 29,   4]; 
let array2=[2, 4, 6, 180, 7, 20]; 
let outlier=new Outlier(); 
let out=outlier.method(array1); 
console.log(out); 
out=outlier.method(array2); 
console.log(out);

Answer 1

function Outlier(){ 
    this.method=function(arr) { 
        let reminder = (arr[0]+arr[1])%2==1 ? 1-arr[2]%2 : 1-arr[0]%2; 
        for(let i=0; i<arr.length; i++){         
            if(arr[i]%2==reminder){ 
                return arr[i]; 
            } 
        } 
    }  
} 
 
let array1=[11, 3, 5, 9, 29, 4]; 
let array2=[2, 4, 6, 180, 7, 20]; 
let outlier=new Outlier(); 
let out=outlier.method(array1); 
console.log(out); 
out=outlier.method(array2); 
console.log(out);

let reminder = (arr[0]+arr[1])%2==1 ? 1-arr[2]%2 : 1-arr[0]%2; определяет, какой остаток будем искать. Если сумма первых двух нечётна, то требуемый элемент среди них, и нужная чётность не такая, как у третьего элемента. А если чётна, то их чётность одинакова и не такая, как нужна, получаем требуемую чётность не такую, как у первого элемента. Ну а остальное - очевидно.

По-хорошему, надо добавить ещё проверок - что есть минимум 3 элемента, что нет строк или ещё какой дряни...

Answer 2

Можно попробовать использовать метод массива .some(); Он возвращает true, при первом совпадении с заданным условием.

Answer 3
if(arr[i]%2==0){
 return arr[i]%2!=0; //Проблема больше всего вот здесь
}
if(arr[i]%2!=0){
 return arr[i]%2==0; //Проблема .... И здесь
}

мне (и Вам тоже) не нранятся эти строчки. для начала приведите их к человеческому языку:

var val = arr[i];
if (chetnoe(val))
  return false;
if (!chetnoe(val))
  return false;

это неверный алгоритм. он всегда возращает false. но он позволяет сделать шаг к правильному.

у вас уже есть какой-то код, вспомогательные функции и вы можете строить алгоритм имея такие "кубики".

подумайте, как бы вы решили свою задачу, имея в арсенале функцию chetnoe (возращает true, если аргумент четный).

попробуйте факт четности обозначить 1, а нечетности -1. что потом можно сделать с этими числами?

READ ALSO
Как обратится к классу, который находится внутри другого класса

Как обратится к классу, который находится внутри другого класса

Доброе утро!) Подскажите пожалуйста, у меняproduct__item используется в нескольких блоках, как указать в js, что добавлять класс нужно лишь тому у кого...

184
Парсинг обьекта Jquery из JSON

Парсинг обьекта Jquery из JSON

Я сохраняю джквери объект который содержит в себе кучу других элементов, в JSON, что-бы хранить его в локальном хранилище, и при загрузке(обновлении)...

231
Как реализовать спрайты не через свойство background?

Как реализовать спрайты не через свойство background?

Никак не могу совладать с одним из элементов при вёрсткеПрошу, собственно, Вашей помощи

295
Кнопка HTML &amp; PHP

Кнопка HTML & PHP

Мне нужно создать форму в которой будет кнопка типа Submit и два текстовых поля, в которые можно будет ввести 2 числа, и по нажатию кнопки должен...

152