2017-02-04 10 views
1

私は、別の配列に含まれるオブジェクトに基づいて配列をフィルタリングするパイプを持っています。どのようにフィルタリングされた配列(array1)をフィルタリングするために使用している配列の順序に基づいて(array2)ソートするのですか?パイプを使用してオブジェクトの別の配列の順序に基づくAngular2ソート配列オブジェクト

import { Injectable, Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'arrayFilter' 
}) 
@Injectable() 
export class AttributeFilterPipe implements PipeTransform { 
    transform(array: any[], filterFrom: any[]): any { 
    array.filter(item => filterFrom.some(f => f.value == item.value)); 
    } 
} 

答えて

1

あなたは、このためのネイティブArray.prototype.sort() methodを利用することができる:我々は内の項目のインデックスを取得するために.indexOf() methodを使用できるように、上記のスニペットで

array.sort((a, b) => { 
    let fromValues = filterFrom.map(f => f.value); 
    return fromValues.indexOf(a.value) < fromValues.indexOf(b.value) ? -1 : 1; 
}); 

を、fromValue配列が作成されます指定された値に基づいて配列filterFromそこから、ソートメソッドは残りの部分を処理し、配列に基づいてarray配列内の項目を並べ替え、filterFrom配列内の対応する値の位置に対して並べ替えます。

.filter()メソッドの後に.sort()メソッドロジックをチェーンすることができます。結果を返すことを忘れないでください。

import { Injectable, Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'arrayFilter' 
}) 
@Injectable() 
export class AttributeFilterPipe implements PipeTransform { 
    transform(array: any[], filterFrom: any[]): any { 
    return array.filter(item => filterFrom.some(f => f.value === item.value)) 
       .sort((a, b) => { 
        let fromValues = filterFrom.map(f => f.value); 
        return fromValues.indexOf(a.value) < 
         fromValues.indexOf(b.value) ? -1 : 1; 
       }); 

    } 
} 
関連する問題