2015-04-06 1 views
0

У меня есть Array a = [0,1,2,3,4,5,6] , и я хочу Подмножество с 3-х элементов, так что результат становится этим:Список последовательное подмножество элементов в Javascript

[0,1,2],[1,2,3],[2,3,4],[3,4,5],[4,5,6] 

Я попытался с помощью этого сценария, что я нашел:

Array.prototype.combinate = function(iItems, aIn) { 
    if (!aIn) { 
     var aIn = new Array(); 
     this.combinate.aResult = new Array(); 
    } 

    for(var i = 0; i < this.length; i++) { 
     var a = aIn.concat(this[i]); 
     var aRest = this.concat(); // Concat with nothing to create copy 
     aRest.splice(0, i + 1); 

     if(iItems && iItems - 1 <= aRest.length) { 
      aRest.combinate(iItems - 1, a); 
      if(iItems == 1) this.combinate.aResult.push(a); 
     } 
    } 

    return this.combinate.aResult; 
} 

Но это дает все возможные подмножества (и становится легко медленным, когда список становится большим, а подмножество поиска мало). Мне нужно только «последовательное» подмножество, как показано выше, так что [1,2,3]в порядке - но не [1,2,4] ..

Любые яркие люди, которые знают, как это сделать в JavaScript ..?

+0

Итерируйте массив, увеличивайте индекс и захватывайте 3 элемента в последовательном порядке, не выходя за пределы. –

+1

Просто повторите до 'a.length - 3' и нажмите' a.slice (i, i + 3) 'на результат на каждой итерации. – lxe

ответ

1

Предполагая, что массив в вопросе не должны быть отсортированы в некотором роде первый, я хотел бы сделать это следующим образом:

function combinate(arr) { 
    var results = []; 

    if (arr.length >= 3) { 
    for (var i = 0; i < arr.length - 2; i++) { 
     var slice = arr.slice(i, i + 3); 
     results.push(slice); 
    } 
    } 

    return results; 
} 

В качестве дополнительной записке, я рекомендовал бы не добавлять что-то подобное в качестве метода прототипа Array. Ничто не мешает вам сделать это, если вам нужно по какой-то причине, но я бы избегал этого.

0

Попробуйте это:

for (var i = 0; i < arr.length - 2; i++) { 
    var combination = new Array(arr[i], arr[i + 1], arr[i + 2]); 
    // or this 
    // var combination = [arr[i], arr[i + 1], arr[i + 2]]; 
    // do something with the new array ?? 
} 
Смежные вопросы