Отфильтровать лишний из массива, а затем вернуть позицию индекса - PullRequest
1 голос
/ 09 мая 2019

У меня есть массив того же слова, но одно из слов в массиве написано в обратном направлении.Функция возвращает позицию индекса «неправильного» слова.Приведенный ниже код работает отлично, но он довольно длинный.

Я хочу знать, есть ли способ сократить код и при этом вернуть ему то же значение?

function oddOneOut(arr) {

  let word = ''

  if (arr[0] === arr[1]) {
    word = arr[0]
  }
  if (arr[1] === arr[2]) {
    word = arr[1]
  }
  if (arr[2] === arr[3]) {
    word = arr[2]
  }
  function wrong(element) {
    return element !== word
  }
  return arr.findIndex(wrong)
}

console.log(oddOneOut(["sword", "sword", "sword", "sword", "drows", "sword"]))

//returns 4

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

При условии, что есть только один элемент, который будет отличаться, вы можете просто проверить каждый элемент по отношению к предыдущему и одному после него, и если он отличается от каждого, верните этот индекс.

for(let i = 0; i < array.length; i++){
  let previous = i - 1;
  let next = i + 1;

  if(i == array.length - 1) {
    next = 0;
  }

  if(array[i] != array[previous] && array[i] != array[next]) {
    return i;
  }
}
0 голосов
/ 09 мая 2019

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

Вот пример:

function oddOneOut(arr) {
  let word = arr[0] === arr[1] ? arr[0] : arr[1] === arr[2] ? arr[1] : arr[0];
  return arr.findIndex(r => r !== word);
}

console.log(oddOneOut(["sword", "drows", "sword", "sword", "sword", "sword"]));

Я надеюсь, что это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...