数组值按连续顺序排列

时间:2018-03-16 20:25:16

标签: javascript jquery

当函数为真时,我用计数器构建一个数组。

因此如果它连续3次都是真的,那么数组看起来像[1,2,3]。如果函数不正确,则计数器中存在间隙,看起来像这样[1,2,3,5]。

在另一个函数中,我需要确定数组长度是否> 2并且数组中的值是连续的顺序。所以[1,2,3]它应该返回true。如果[1,2,3,5]它应该返回false。

我没有找到任何有用的东西。任何有关可能解决方案的帮助都将非常感激。

我已经看过了(并且已经尝试过了)但它不起作用。

Array.prototype.is_consecutive = (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];
    };
})();

5 个答案:

答案 0 :(得分:2)

如果您完全可以依赖填充阵列的算法,请遵循规定的规则

  

当函数为true时,我使用计数器构建一个数组。因此如果它连续3次都是真的,那么数组看起来像[1,2,3]。如果函数不正确,则计数器中存在间隙,看起来像这样[1,2,3,5]。

然后,您需要做的就是检查数组的最后一个元素是否与数组长度相同:

&#13;
&#13;
var good = [1, 2, 3];
var bad = [1, 2, 3, 5];

var isValid = function(arr) {
  return (arr.length > 2 && arr[arr.length - 1] === arr.length); // Thanks to Jonas W.
}
console.log(isValid(good));
console.log(isValid(bad));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以在第一个索引值上使用闭包,并在检查时增加该值。

function isConsecutive(array) {
    return array.length >= 2 && array.every((v => a => a === v++)(array[0]));
}

console.log([[1, 2, 3, 4], [1, 2, 3, 5]].map(isConsecutive));

答案 2 :(得分:0)

 Array.prototype.isConsecutive = function(){
   for(var i = 1; i < this.length; i++)
     if(this[i] !== this[i - 1] + 1)
        return false;
   return true;
 };

或混淆版本:

  const isConsecutive = arr => !!arr.reduce((prev, curr) => curr === prev + 1 ? curr : 0);

答案 3 :(得分:0)

var array=[5,6,7,8];

function continuous(arr){
  var max = Math.max(...arr);
  var min = Math.min(...arr);

  return (((max-min)+1) * (min + max) / 2) == arr.reduce((a, b) => a + b, 0)
}

console.log(continuous(array))

答案 4 :(得分:0)

您也可以使用它,它是递归的:

&#13;
&#13;
Array.prototype.isConsecutive = function(){
if (arguments.length==0) return this.isConsecutive(0);
else if (arguments[0]>=this.length) return true;
else return (this[arguments[0]]==arguments[0]+1&&this.isConsecutive(arguments[0]+1
));}
cons=[1,2,3];
console.log(cons.isConsecutive());
non_cons=[1,2,2,4];
console.log(non_cons.isConsecutive());
&#13;
&#13;
&#13;