2017-12-27 21 views
0

私は、フィルタを一致させて要素の配列を返さなければならない関数を持っています。JavaScriptでオブジェクトの配列を別の配列と効率的に比較するにはどうすればよいですか?

filter_getCustomFilterItems(filterNameToSearch: string, appliedFilters: Array<any>) { 
    let tempFilterArray = []; 
    let masterFilterList = getMasterFilterList(); 
    /* 
    filterNameToSearch can be a string either as `Item2` or `Item3` 

    masterFilterList will be of type 
    masterFilterList: Array<any> = [ 
    { 
     Item1: 'some-item-1', 
     Item2: 'some-item-2', 
     Item3: 'some-item-3', 
     Item4: 'some-item-5', 
    }, 
    { 
     Item1: 'some-item-10', 
     Item2: 'some-item-11', 
     Item3: 'some-item-12', 
     Item4: 'some-item-13', 
    },...... 
    ]; 

    appliedFilters will be of type 
    appliedFilters: Array<any> = [ 
    { 
     name: 'Item1', 
     filters: [ 
      {value: 'some-item-1', status: 'selected'}, 
      {value: 'some-item-10', status: 'selected'} 
     ] 
    },...... 
    ]; 
*/ 

for (let masterFilterItem of masterFilterList) { 
    //Missing logic here 
} 
} 

Iは、以下の条件の下で商品 filterNameToSearch = 'Item2'の配列を返すmasterFilterListをフィルタリングしたい:ここで機能コードです

1)各アレイ要素について(appliedFilterItemを想定)appliedFiltersでは、比較masterFilterItem[appliedFilterItem.name]appliedFilterItem.nameappliedFilterItemにおけるフィルタのいずれかがmasterFilterItem[appliedFilterItem.name]

2と同じ値を持っているかどうかを確認)条件はのようなもののように見えるように持っています。しかし、appliedFiltersの要素の数は動的です。

この問題で私を助けてください。

+0

あなたの必要な出力は –

+0

と不明です。出力は条件が適用された 'masterFilterList'の項目の配列になります。 filterNameToSearch = "Item2"と指定された場合、 'appliedFilters'の条件を持つ' masterFilters'内の 'Item2'要素をすべて返さなければなりません – starlight

答えて

2
return masterFilterList.map(el => el[filterNameToSearch]) 
     .filter(value => 
     appliedFilters.some(({name, filters}) => 
      name === filterNameToSearch && 
      filters.some(filter => 
       filter.status === "selected" && 
       filter.value === value 
      ) 
     ) 
    ); 
関連する問題