2017-06-21 69 views
1

還有其他幾個類似的問題,但對於所有此問題,排序鍵都是已知的。將數組拆分爲更小的數組,取決於數值何時更改

所以這是我的問題。 考慮這個測試類:

class Test{ 
    constructor(){ 
     this.value1 = val1; 
     this.value2 = val2; 
     this.value3 = val3; 
    } 

,這裏是一個比較功能

function compare(a,b){ 
    if(a.value3 < b.value3){ 
     return -1; 
    if(a.value3 > b.value3){ 
     return 1; 
    return 0 
} 

所以當我有一個array of Test's F.E.與size 50 我會這樣排序這個數組。

arrayOfTest.sort(compare) 

這將返回我的數組排序value3。現在我想將這個大數組分成幾個較小的數組,取決於WH3值3的變化。 因此,例如:

arrayOfTest=[a = Test(value3 = 3),b = Test(value3 = 3),c = Test(value3 = 4)] 

應分成

array1 = [a = Test(value3 = 3),b = Test(value3 = 3)] 

array3 = [c = Test(value3 = 4)] 

回答

1

一個可能的方式來實現你的目標在同一路徑上(無需排序第一)將按照給定的鍵進行分組,如下面的片段所示:

var groupBy = function(xs, key) { 
    return xs.reduce(function(rv, x) { 
    (rv[x[key]] = rv[x[key]] || []).push(x); 
    return rv; 
    }, {}); 
}; 
// groupBy(arrayOfTest, 'value3')