2017-06-29 15 views
0

私はオブジェクトの2つの配列を持っています。私はarray.filterを試しましたが、配列の中から配列をフィルタリングできませんでした。角度2 - 別の配列からのオブジェクトのフィルタ配列

注:OPTIONGROUPの配列項目は動的です。

アレイ1:

0:[{CATEGORYNAME:"Scrub Pants" 
CATEGORY_ID:2 
DESCRIPTION:null 
IMAGE_URL_1:"http://www.pulseuniform.com/stylepic/AD-2513.jpg" 
IMAGE_URL_2:"http://www.pulseuniform.com/stylepic/AD-2513.jpg" 
IMAGE_URL_3:"http://www.pulseuniform.com/stylepic/AD-2513.jpg" 
IMAGE_URL_4:"http://www.pulseuniform.com/stylepic/AD-2513.jpg" 
NUM_OF_ORDERS:16 
NUM_WISH_LIST:"100" 
OPTIONGROUP:[ 
    { 
     BRAND:'Adar Medical Uniforms' 
     COLOR:'ASP:Asparagus' 
     PRICE:'11.19' 
     SIZE:'2XL' 
     }, 
    { 
     BRAND:'Adar Medical Uniforms' 
     COLOR:'ASP:Asparagus' 
     PRICE:'16.19' 
     SIZE:'4XL' 
     }], 
PRICE: 175 
PRODUCT_ID:17497 
SALE_PRICE:11.19 
SELLERNAME:"Adar Medical Uniforms" 
SHORT_DESCRIPTION:"Adar Universal Unisex Natural-Rise Five Pocket Drawstring Tapered Leg Pants" 
STYLECODE:"AD-2513" 
STYLENAME:"Adar Universal Unisex Natural-Rise Five Pocket Drawstring Tapered Leg Pants" 
THUMB_IMAGE_URL:"http://www.pulseuniform.com/stylepic/AD-2513.jpg" 
VENDORNAME:"Adar"}] 

どのように私はオプショングループ内の配列2から配列1アイテムを検索することができます。 は、以下の2

アレイ2私の配列です:

{COLOR:[{0:"ASP:Asparagus"},{1:"BRG:Burgundy"}], 
SIZE:[{0:"M"}] } 
+0

配列は、あなたが2つの配列を含むオブジェクトである "配列2" と呼んで何 []で区切られていても、検索のparams構造を簡素化する必要がありました。あなたの "Array1"は、(別の配列を含む)オブジェクトを含んでいます。より具体的にすることができますか、達成したいことの正確な例を挙げることができますか? – Pac0

+0

yeh実際にはarray2は色、サイズ、ブランドなどの配列を含むオブジェクトです – ArsalanK

+0

@ Pac0私は複数のオブジェクトを持っているarray1をフィルタリングする必要があります。私は最初の配列のオブジェクトで2番目の配列の項目を検索する必要があります...少し混乱:P – ArsalanK

答えて

0

あり、それを行うには、より効率的な方法であるが、ここではArray.filter()と複数の反復を使用して実施例とフィドルだかもしれません。

https://jsfiddle.net/gmedyh6s/

私は

interface SearchParams = { 
    SIZE: Array<string>, 
    COLOR: Array<string> 
}; 

const filterMyArray = function(array: Array<any>, searchParams: SearchParams): Array<any> { 
    return array.filter(item => { 

    // Parsing every search param 
    return Object.keys(searchParams).map(param => { 

     // Getting the array of params of the current item 
     let itemOptions = item.OPTIONGROUP.map(option => option[param]); 

     // Search param is contained in the considered array ? 
     return searchParams[param].every(elem => itemOptions.indexOf(elem) > -1); 
    }) 

    // At this point we have an array of boolean, flattening it --> Must be true everywhere 
    .reduce((total,item) => { 
      return total && item; 
    }, true); 

    }); 
} 

const array: Array<any> = [ ... ]; 

const filtered = filterMyArray(array, { 
    SIZE:['2XL'], 
    COLOR:['ASP:Asparagus'] 
}); 
関連する問題