Javascript - 如何检查 3 个数字是否连续并返回起点
Javascript - How Do I Check if 3 Numbers Are Consecutive and Return Starting Points?
如果我有一个[1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7]
数组,并且想找到 3 个连续数字(无论是升序还是降序)的每个情况,我将如何做到这一点?
然后,第二部分是使用每个序列的索引来提醒数组。
例如,前一个数组将返回[0,4,6,7]
。
到目前为止,我有这个...这是一个艰难的开始
var arr = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var results = [];
for (var i = 1; i < arr.length; i++) {
if ((arr[i] - arr[i-1] != 1) && (arr[i] - arr[i+1] != 1)) {
results.push(arr[i]);
}
}
alert(results);
感谢您的帮助!
感谢您的math.abs指针。这就是我最终所做的:
var array = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var indexes = [];
for(var i=0; i < array.length; i++) {
var diff = array[i+1] - array[i];
if(Math.abs(diff)==1 && array[i+1]+diff == array[i+2]) {
indexes.push(i);
}
}
alert(indexes);
了解此任务的上下文也会很有趣...无论如何,这是我的解决方案:
var arr = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var results = [];
var limit = arr.length - 1;
var sequence = 0;
for (var i = 0; i < limit; ++i) {
var diff = arr[i+1] - arr[i];
if (sequence && sequence === diff) {
results.push(i-1);
continue;
}
sequence = (diff === 1 || diff === -1) // or ... Math.abs(diff) === 1
? diff
: 0;
}
console.log(results);
这个想法很简单:我们不需要两次比较两个邻居。如果此比较开始一个序列,则引发一种序列标志就足够了,如果没有序列,则降低它。
这是解决您问题的一种非常字面的方法 - 我只检查了正向数字,但添加反向几乎以相同的方式完成
var arr = [1, 2, 3, 4, 10, 9, 8, 9, 10, 11, 7];
var results = [];
for (var i = 0; i < arr.length; i++) {
// if next element is one more, and one after is two more
if (arr[i+1] == arr[i]+1 && arr[i+2] == arr[i]+2){
// store the index of matches
results.push(i);
// loop through next numbers, to prevent repeating longer sequences
while(arr[i]+1 == arr[i+1])
i++;
}
}
console.log(results);
您需要仔细查看 if 语句中的表达式。
它目前说:
- 如果当前元素与上一个元素之间的差值不是 1,并且
- 如果当前元素和下一个元素之间的差异不是 1
然后就是一个结果。
因此,从表面上看,这是一个不正确的逻辑语句,无法确定当前元素是否位于连续的三个元素的中间。
此外,这也没有考虑三个的升序或降序集。
试着用语言弄清楚情况会是什么样子,然后从那里开始。
需要考虑的一些事项
- 我建议你从
i = 2
开始浏览列表 - 研究
Math.abs
我认为这是一种更简单的方法。首先检查左右数字的平均值是否等于中间,然后检查任一邻居的绝对值是否为 1。
var arr = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var indexes = [];
for(var i=1; i < arr.length; i++) {
if((arr[i-1]+arr[i+1]) / 2 == arr[i] && Math.abs(arr[i]-arr[i-1]) == 1) {
indexes.push(i-1);
}
}
alert(indexes);
var arr = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var results = [];
for (var i = 0; i < arr.length - 2; i++) {
if ((arr[i+1] - arr[i] === 1) && (arr[i+2] - arr[i+1] === 1)) {
results.push({
i:i,
mode:'up',
arr:[arr[i],arr[i+1],arr[i+2]
});
}
if ((arr[i+1] - arr[i] === -1) && (arr[i+2] - arr[i+1] === -1)) {
results.push({
i:i,
mode:'down',
arr:[arr[i],arr[i+1],arr[i+2]
});
}
}
alert(results);
相关文章:
- 测试索引值是否等于某个数字的倍数
- jquery检查数字是否键入了isNaN
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 是否可以在javascript中执行“;数字加负数”;
- ==是否创建垃圾?(将字符串与数字进行比较时)
- 试图检查表单中的值是否为一个设定范围内的数字
- 使用 Javascript 检查文本区域值是否为数字
- 货币过滤器是否仅适用于使用 $scope.$eval() 的数字
- jQuery 验证输入文本是否仅接受数字、单词或日期
- 检查字符串是否等于一个单词和一个数字
- 检查输入是否都是数字html javascript
- 检查给定的数字是否属于node.js中的Fibonacci序列
- 验证数字是否在0.00到20.00之间的正则表达式
- 如何在javascript中测试字符串是否包含带正则表达式的数字
- javascript测试一个值是否是一个数字和一个大于0的数字
- 如何在函数中编写 if/else 语句,告诉我一个数字是否可以被 2 整除(在 javascript 中)
- Javascript正则表达式,用于检查字符串是否为有效数字
- 验证javascript中的输入是否在2个数字之间
- 当一些文本粘贴到文本框中时(没有设置超时),是否检查数字