【问题标题】:Filter out the odd one out from an array, then return the index position从数组中过滤掉奇数,然后返回索引位置
【发布时间】:2019-05-09 11:18:31
【问题描述】:

我有一个相同单词的数组,但是数组中的一个单词是倒着拼写的。该函数返回“错误”单词的索引位置。下面的代码工作得很好,但它很长。

我想知道是否有办法缩短代码并使其返回相同的值?

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

【问题讨论】:

  • 欢迎来到 StackOverflow!乍一看,我会说您的 oddOneOut() 函数可以通过使用 for 循环来改进——目前它看起来相当硬编码。

标签: javascript arrays function filter


【解决方案1】:

假设只有一项不同,您只需将每一项与之前和之后的一项进行检查,如果与每一项不同,则返回该索引。

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;
  }
}

【讨论】:

    【解决方案2】:

    我认为您可以对 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"]));
    

    我希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2014-06-20
      • 2014-09-16
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2021-11-02
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多