javascript - 在一行中连续返回元素
问题描述
我有一个函数可以连续返回元素, 例如,如果连续有 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'
解决方案
如果数组中有四个连续的相同颜色/值,您可以为最后一次颜色检查获取一个计数器和一个值并提前退出。
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');
推荐阅读
- protractor - 自动化测试的 UI 覆盖率
- c# - 将 .NET Core 项目的测试覆盖率从 Azure DevOps 发布到 SonarCloud
- c# - 如何从一个对象启动两个并行线程?
- django - Dockerized Nginx,域无法正常工作
- swift - Alamofire refreshToken with Retrier:如何获取 refreshToken 请求的状态并重新路由到 LoginView
- ios - 解析问题预期表达式 xcode
- php - 执行触发器时出现 SQL DELIMITER 错误
- java - Java Spring:如何同时运行两个不同的 cronjobs?
- powershell - 试图在 PowerShell 中去除不需要的文本
- youtube - 如何使用 YouTube Live Streaming API 创建 Quick 类型的事件(使用 Google Hangouts On Air)?