简体   繁体   中英

check if elements in array are consecutive — javascript

I have an array as

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

Now I want to check if the values in the array are consecutive.

Being more specific, I want this

First Check gives first and second element are consecutive and the next element is not consecutive then the algo must return the first element from where the consecutive number started

Like

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

Please help Thanks in advance

/**
 * 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)
);

One sidenote is that you want to call it multiple times, so each call should know which array it's working on and what the previous offset in that array was. One thing you can do is to extend the native Array object. [ Demo ]

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];
  };
})();

Usage

var arr =  [1,2,3,4,6,8,9];
arr.nextCons(); // 1
arr.nextCons(); // 6
arr.nextCons();​ // 8
 /**
 * 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);

Check if all numbers in array are consecutives:

   const allConsecutives = (arr) =>{ 
     return arr.every((num, i)=> (arr[i+1]||num+1)-num === 1)
    }

pseudo code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM