Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2-从另一个数组筛选对象数组_Javascript_Arrays - Fatal编程技术网

Javascript Angular2-从另一个数组筛选对象数组

Javascript Angular2-从另一个数组筛选对象数组,javascript,arrays,Javascript,Arrays,我有两个对象数组。我尝试了array.filter,但无法从数组内部筛选数组 注意: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.j

我有两个对象数组。我尝试了array.filter,但无法从数组内部筛选数组

注意: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"}]
如何在optiongroup中从array2搜索array1项。 下面是我的数组2

阵列2:

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

也许有一种更有效的方法可以做到这一点,但这里有一个使用
Array.filter()
和多次迭代的工作示例

不过我不得不简化你的搜索参数结构

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']
} );
接口搜索参数={
大小:数组,
颜色:数组
};
常量filterMyArray=函数(数组:数组,searchParams:searchParams):数组{
返回数组.filter(项=>{
//解析每个搜索参数
返回Object.keys(searchParams).map(param=>{
//获取当前项的参数数组
让itemOptions=item.OPTIONGROUP.map(option=>option[param]);
//搜索参数是否包含在所考虑的数组中?
返回searchParams[param].every(elem=>itemOptions.indexOf(elem)>-1);
})
//此时,我们有一个布尔数组,将其展平-->在任何地方都必须为真
.减少((总计,项目)=>{
返回总计和项目(&T);
},对);
});
}
常量数组:数组=[…];
常数过滤=过滤矩阵(数组{
尺寸:['2XL'],
颜色:['ASP:Asparagus']
} );

数组由[]分隔,您称之为“array 2”的对象包含2个数组。您的“Array1”包含(一)个对象,其本身包含另一个数组。你能更具体一点,给出一个你想要实现的精确例子吗?是的,实际上array2是一个包含颜色、大小、品牌的数组etc@Pac0我需要过滤数组1,它在每个对象中有多个对象(在这个问题中,我只显示一个对象),我有optiongroup的动态数组。我需要在第一个数组的对象中搜索第二个数组的一项…有点困惑:P