2015-10-29 50 views
2

我有一個ng-repeat。用數字偏移數組值,在引導列上進行ng重複操作

<div ng-repeat="setup in setupCategories | filterCategories: 'label' : 2" class="col-xs-6"> 
    {{setup.label}} 
</div> 

將其過濾/由PARAM值按字母順序排序,在這種情況下label

.filter('filterCategories', function() { 
    return function(array, field, offset) { 
    //Lodash sorts array by my field - label 
    var sortedArray = _.sortBy(array, field); 
    return sortedArray; 
    }; 
}) 

我也有用於抵消,這是在本例中2的參數。

眼下這將NG-重複的col-xs-6的,把

[Adam, Bob, Carol, Don, Eve, Frank] 

Adam  Bob 
Carol Don 
Eve  Frank 

我想要做的是顯示我的數據是這樣的。 (更容易閱讀)

Adam Don 
Bob Eve 
Carol Frank 

要做到這一點,我需要抵消我的過濾器中的數組值。所以轉

[Adam, Bob, Carol, Don, Eve, Frank] 

[Adam, Don, Bob, Eve, Carol, Frank] 

這樣當作爲col-xs-6重複它會自動按正確的順序顯示。有沒有這不是很辛苦一個Javascript或Lodash方式對我來說很容易抵消我的數組值,這樣我的過濾功能可以指定2col-xs-6的,3col-xs-4的,等...

+0

不應該是第二列的「唐伊芙弗蘭克」嗎?否則,我不明白你想重新排列數組值。 – muenchdo

回答

1

。這是我自己最近寫的。它考慮到items_count/column_count將是非整數。

function arrangeByColumns(list, column_count) { 
    var copy_list = list.slice(); 
    var result = []; 
    var big_column_size = Math.floor(list.length/column_count) + 1; 
    var big_column_count = list.length % column_count; 

    for (var i = 0; i < big_column_count; i++) { 
     result.push(copy_list.splice(0, big_column_size)); 
    } 
    while (copy_list.length) { 
     result.push(copy_list.splice(0, big_column_size - 1)); 
    } 
    return result; 
} 

function flattenColumns(list) { 
    var result = []; 
    for (var i = 0; i < list[0].length; i++) { 
     list.forEach(function (value) { 
      if (value[i]) 
       result.push(value[i]); 
     }); 
    } 
    ; 
    return result; 
} 

var array = ['Adam', 'Bob', 'Carol', 'Don', 'Eve', 'Frank']; 
console.log(flattenColumns(arrangeByColumns(array, 2))); 
+0

非常感謝您的邊緣案例邏輯!從我收集的內容來看,'arrangeByColumns'通過'column_count'數組分割了列表。而'flattenColumns'在數組數組上做了一個「zip」操作。正確? – Austin

+0

@奧斯汀,是的。這是正確的。 – sectus