Этот пример делает трюк для вас. Однако я любезно прошу других богов высших программ улучшить это или предоставить другое решение. Я думаю, что этот код может быть сильно оптимизирован. Прокомментируйте, если вы найдете ошибки или примеры, на которые эта функция возвращает ошибочное решение.
function returnLargestConsecutiveArraySlice(array)
{
//set an empty array.
var a = [];
//walk the supplied array and check if number is not repeated
array.filter(function (element, index, array) {
if (element != array[index-1] && element != array[index+1])
{
a.push(index);
return element;
}
}
);
//the returned array contains all indexes to the numbers that are not repeated.
//walk the array and check if number the next number matches the current one.
//If so the index is consecutive.
var numbers = a;
var b = [[]]; //use an empty array to start with.
var index = 0;
for (var i = 0; i < numbers.length-1; i++){
if(numbers[i+1] == numbers[i]+1)
{
//number is consecutive, add.
b[index].push(numbers[i]);
}
else
{
//chain broken, start a new one.
index++;
b[index] = [];
}
}
//we now have an array with all chains. Look for the largest chain.
var largest = [];
for (var i = 0; i < b.length; i++)
{
if (b[i].length > largest.length)
{
largest = b[i];
}
}
//largest chain found. Slice the original array on the largest chain.
return array.slice(largest[0], largest[0] + largest.length+1);
}
console.log(returnLargestConsecutiveArraySlice([1, 1, 1, 2, 2, 2, 4, 5, 6, 1, 1, 7, 8, 9, 10, 11, 2, 2, 6, 2, 1, 8]));
Посмотрите в array.map и Array.filter на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Mouser
вы можете использовать RegExp для этого , а не много циклов – dandavis
Вам не нужно указывать «массив с разделителями-запятыми». Массивы - это массивы. У них нет разделителей, кроме исходного кода, а затем они всегда * разделяются запятыми. – meagar