首页 > 解决方案 > 在一行中连续返回元素

问题描述

我有一个函数可以连续返回元素 例如,如果连续有 4 个“绿色”元素,则该函数应返回字符串:“Green Wins”

['green', 'blue', 'green', 'green', 'green', 'green', 'blue'] // -->it should return 'Green wins'  

否则,它应该返回'Draw'

const consecutive  = arr => {
  for(let i  = 0; i < arr.length; i++) {
    if(arr[i] === 'green' && arr[i+1] === 'green' && arr[i+2] === 'green' && arr[i+3] === 'green') {
      return 'Green Wins'
    }
    if(arr[i] === 'blue' && arr[i+1] === 'blue' && arr[i+2] === 'blue' && arr[i+3] === 'blue') {
      return 'Blue Wins'
    }
  }
  return 'Draw';
}

let greenWins = consecutive(['green', 'blue', 'green', 'green', 'green', 'green', 'blue']);
console.log(greenWins); // --> 'Green Wins'

这是解决它的代码,但它有点重复,这就是为什么我请求你的帮助,如果我们可以用reduce 方法来解决它?

 const consecutive  = arr => {
 for(let i  = 0; i < arr.length; i++) {
   if(arr[i] === 'green' && arr[i+1] === 'green' && arr[i+2] === 'green' && arr[i+3] === 'green') {
     return 'Green Wins'
   }
   if(arr[i] === 'blue' && arr[i+1] === 'blue' && arr[i+2] === 'blue' && arr[i+3] === 'blue') {
     return 'Blue Wins'
   }
 }
 return 'Draw!';
}

let greenWins = consecutive(['green', 'blue', 'green', 'green', 'green', 'green', 'blue']);
console.log(greenWins); // --> 'Green Wins'

标签: javascript

解决方案


如果数组中有四个连续的相同颜色/值,您可以为最后一次颜色检查获取一个计数器和一个值并提前退出。

let array = ['green', 'blue', 'green', 'green', 'green', 'green', 'blue'],
    counter = 0,
    color,
    check = v => {
        if (v === color) return ++counter === 4;
        counter = 1;
        color = v;
    };

if (array.some(check)) console.log(color, 'wins');


推荐阅读