2014-03-06 23 views
1

簡體版陣列陣列誰的對象的指數逐步成長

爲...

ar = [ 
     {"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"e","index":4}, 
     {"element":"d","index":3} 
]; 

應該返回......

ans = [[ 
     {"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"e","index":4}], 

     [{"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"d","index":3}] 
]; 

它可以返回的只是陣列{ 「元素」:「e」,「index」:4},只是{「element」:「d」,「index」:3},因爲它沒有任何東西,但沒有必要。

原始 我有此數組元素...

ar = [ 
     {"element":"c","index":2}, 
     {"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"e","index":4}, 
     {"element":"d","index":3} 
]; 

我想返回包含序列,其中「索引」的每個的對象逐步增長數組的數組,並且具有最大數量的對象obj1[index] < nextobj[index]

即它應該返回..

[ 
    [{"element":"c","index":2}, {"element":"e","index":4}], 
    [{"element":"c","index":2}, {"element":"d","index":3}], 
    [{"element":"a","index":0}, {"element":"b","index":1}, {"element":"d","index":3}], 
    [{"element":"a","index":0}, {"element":"b","index":1}, {"element":"e","index":4}] 
    [{"element":"d","index":3}], 
    [{"element":"e","index":4}] 
] 

我一直在使用ar.reduce試過,但我並不熟悉它,不知道這是否是適合這種情況。

+0

1)「元素」扮演什麼角色? 2)在這個例子中有5個元素,總共有31個(= 2^5-1)非空子集包含一個遞增序列,其中只顯示了4個。爲什麼只有這4個? – Matt

+0

我認爲指數3和4的指標也應包括在內 – natecraft1

+0

元素不起作用。我不想要所有的子集。只是索引增加的一個(而不是子集的所有變化),只是它增加的最大值。 2 <4,2 <3,0 <1 <3,0 <1 <4。例如,不要僅以ind的0和1返回objs,因爲仍然存在obj,並且索引更高,這很難解釋,讓我知道如果你有一個問題 – natecraft1

回答

1

不知道爲什麼這些都不是你的榜樣上市

[{ element="a", index=0}, { element="e", index=4}] 
[{ element="a", index=0}, { element="d", index=3}] 
[{ element="b", index=1}, { element="e", index=4}] 
[{ element="b", index=1}, { element="d", index=3}] 

但這裏是能夠產生一個接近

var ar = [ 
     {"element":"c","index":2}, 
     {"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"e","index":4}, 
     {"element":"d","index":3} 
]; 

var results = []; 

traverse([], 0); 

function traverse(r, startIdx) 
{ 
    if (startIdx >= ar.length){ 
     console.log(r); 
     return; 
    } 

    for (var i = startIdx; i < ar.length ; i++){ 
     if ((startIdx == 0) || (r[r.length - 1].index) <= ar[i].index) {   
      rCopy = r.slice(0); 
      rCopy.push(ar[i]); 

      traverse(rCopy, i + 1); 
     } 
     else if (r.length > 0) { 
      console.log(r); 
     } 
    } 
} 

JSFiddle1JSFiddle2

var ar = [ 
     {"element":"c","index":2}, 
     {"element":"a","index":0}, 
     {"element":"b","index":1}, 
     {"element":"e","index":4}, 
     {"element":"d","index":3} 
]; 

var results = []; 

traverse([], 0); 
collapse(results); 

//console.log(results); 

for (var i = results.length - 1; i >= 0; i--) { 
    console.log(results[i]); 
} 

function traverse(r, startIdx) { 
    if (startIdx >= ar.length) { 
     results.push(r); 
     return; 
    } 

    for (var i = startIdx; i < ar.length ; i++) { 
     if ((startIdx == 0) || (r[r.length - 1].index) <= ar[i].index) { 
      rCopy = r.slice(0); 
      rCopy.push(ar[i]); 

      traverse(rCopy, i + 1); 
     } 
     else if (r.length > 0) { 
      results.push(r); 
     } 
    } 
} 

function collapse() { 
    for (var i = results.length - 1; i >= 0; i--) { 
     for (var j = results.length - 1; j >= 0; j--) { 
      if ((i !== j) && (contains(results[i], results[j]))) { 
       results[i].remove = true; 
      } 
     } 
    } 

    for (var i = results.length - 1; i >= 0; i--) { 
     if (results[i].remove) { 
      results.splice(i, 1); 
     } 
    } 
} 

// Checks if set1 is contained within set2 
function contains(set1, set2) { 
    for (var i = 0; i < set1.length; i++) { 
     var found = false; 

     for (var j = 0; j < set2.length; j++) { 
      if (set1[i].index === set2[j].index) { 
       found = true; 
       break; 
      } 
     } 

     if (!found) { 
      return false; 
     } 
    } 

    return true; 
} 

JSFiddle3

+0

嘿阿米特,原因是因爲那些我們想打印出最大的連續元素,而不是所有的可能性。例如,因爲[{element =「a」,index = 0},{element =「e」,index = 4}]可能包含另一個元素並且看起來像這樣[{「element」:「a」,「index」 :0},{「element」:「b」,「index」:1},{「element」:「e」,「index」:4}],我們不關心集合的較小版本 – natecraft1

+0

檢查更新的小提琴。 –

+0

ü達人感謝 – natecraft1