检查数组元素是否连续 --- JavaScript

3

我有一个数组

arr = [1,2,3,4,6,7,8,9]

现在我想检查数组中的值是否连续。

更具体地说,我想要这样:

第一次检查应该给出第一个和第二个元素是连续的,而下一个元素不连续,那么算法必须返回连续数字开始的第一个元素。

比如

First Check will give 1
Second Check will give 6
and so on...

Please help Thanks in advance


4
这是一个作业吗?看起来像是。如果是,展示一下你已经尝试过什么以及卡在哪里了。如果不是,请解释一下需要你这样做的背景。 - The Archetypal Paul
我想要一个算法,它可以按照我最后描述的值返回给我。 - Rohit
你想要它字面上以数组或字符串的形式返回 1,6,8,还是想要多次运行并在每次运行中获取下一个数字? - roryf
这是相当基础的东西。先试一试吧。 - James Wiseman
@Rohit。那么,告诉我们你的进展吧。显然你有一些代码无法运行 - 把它给我们看,我们可以从那里开始工作。 - James Wiseman
显示剩余5条评论
6个回答

5
/**
 * Given an array of number, group algebraic sequences with d=1
 * [1,2,5,4,8,11,14,13,12] => [[1,2],[4,5],[8],[11,12,13,14]]
 */
import {reduce, last} from 'lodash/fp';

export const groupSequences = (array) => (
  reduce((result, value, index, collection) => {
    if (value - collection[index - 1] === 1) {
      const group = last(result);
      group.push(value);
    } else {
      result.push([value]);
    }
    return result;
  }, [])(array)
);

4
 /**
 * Given an array of number, group algebraic sequences with d=1
 * [1,2,3,4,5,6] => true
 * [1,2,4,5,6] => false
 */
 const differenceAry = arr.slice(1).map(function(n, i) { return n - arr[i]; })
 const isDifference= differenceAry.every(value => value == 1)
 console.log(isDifference);

3

需要注意的一点是,您希望多次调用它,因此每次调用都应该知道它正在处理哪个数组以及该数组中先前的offset是什么。您可以做的一件事是扩展本机的Array对象。[演示]

Array.prototype.nextCons = (function () {
  var offset = 0; // remember the last offset
  return function () {
    var start = offset, len = this.length;
    for (var i = start + 1; i < len; i++) {
      if (this[i] !== this[i-1] + 1) {
        break;
      }
    }
    offset = i;
    return this[start];
  };
})();

使用方法

var arr =  [1,2,3,4,6,8,9];
arr.nextCons(); // 1
arr.nextCons(); // 6
arr.nextCons();​ // 8

为什么不直接将上一个索引返回作为此次开始的位置呢? - The Archetypal Paul
我想是这样的。在你的情况下,如果调用次数超过非连续元素的数量,则返回大于数组长度的递增值,并且没有办法将其重置为数组的开头... - The Archetypal Paul
@Paul - 这取决于OP的期望,但修改代码相当简单。 - gblazex
你会如何修改它以进行重置?(只是好奇) - The Archetypal Paul
... 返回函数(reset) { 如果(reset) offset = 0; ... } 然后都可以使用 arr.nextCons(true);arr.nextCons("reset"); - gblazex

2

检查数组中的所有数字是否连续:

2022年3月更新

 const allConsecutives = (arr) =>{ 
    if(arr.some(n=> typeof n !== "number" || Number.isNaN(n))) return false;
     return arr.every((num, i)=>  arr[i+1]-num === 1 || arr[i+1] === undefined)
  }

当arr = [8,0]或[0,0]时,这将返回true,因此并不完美。 - Carl Sala
1
你是对的@CarlSala,我刚刚纠正了它,谢谢。 - Enrique Briones Arcos

0

伪代码:

int count = 0 
for i = 0 to array.length - 2 
    if  {array[i + 1] - array[i] = 1 then 
        count+=1 
         return i
    else count=0} 

0
const array1 = [1,2,3];
const sum = array1.reduce((accumulator, currentValue) =>{
  return accumulator + currentValue;
});
const max = Math.max(...array1);
  maximum = max
  if(sum == maximum * (maximum+1) /2) {
       console.log(true);
  } else {
       console.log(false);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接