当函数为真时,我用计数器构建一个数组。
因此如果它连续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];
};
})();
答案 0 :(得分:2)
如果您完全可以依赖填充阵列的算法,请遵循规定的规则
当函数为true时,我使用计数器构建一个数组。因此如果它连续3次都是真的,那么数组看起来像[1,2,3]。如果函数不正确,则计数器中存在间隙,看起来像这样[1,2,3,5]。
然后,您需要做的就是检查数组的最后一个元素是否与数组长度相同:
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;
答案 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)
您也可以使用它,它是递归的:
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;