Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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:按数组过滤嵌套数组_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

香草JavaScript:按数组过滤嵌套数组

香草JavaScript:按数组过滤嵌套数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,考虑以下一系列帖子: posts_array = [ { id: 1, categories: [ { category_id: 1, category_name: "one" }, { category_id: 2, category_name: "two" }, }, { id: 2, categories: [ { category_id: 1, category_name: "one"

考虑以下一系列帖子:

posts_array =
[
 {
  id: 1,
  categories: [
   {
    category_id: 1,
    category_name: "one"
   },
   {
    category_id: 2,
    category_name: "two"
   },
 },
 {
  id: 2,
  categories: [
   {
    category_id: 1,
    category_name: "one"
   },
   {
    category_id: 3,
    category_name: "three"
   },
 },
 {
  id: 3,
  categories: [
   {
    category_id: 1,
    category_name: "one"
   },
   {
    category_id: 4,
    category_name: "four"
   },
   {
    category_id: 5,
    category_name: "five"
   },
 }    
]
然后我有一个类别ID数组,我想用它来过滤上面的数组:

const category_id_array = [1, 4];
我希望进行筛选以满足所有条件,即返回posts\u数组中的元素,这些元素包括两个类别。类别\u id=1类别。类别\u id=4

function filterPostsByCategoryIds(category_id_array){
    const filter_categories = category_id_array;
    const custom_filter = d => d.categories.some(c => filter_categories.includes(c.category_id));
    const filtered_posts_array = posts_array.filter(custom_filter);
    return filtered_posts_array;
}
我尝试了下面的方法(使用.some函数),但它返回满足任一条件的元素,即categories.category\u id=1categories.category\u id=4

function filterPostsByCategoryIds(category_id_array){
    const filter_categories = category_id_array;
    const custom_filter = d => d.categories.some(c => filter_categories.includes(c.category_id));
    const filtered_posts_array = posts_array.filter(custom_filter);
    return filtered_posts_array;
}
交换.some with.each完全不返回任何元素

如何按类别\u id\u数组过滤posts\u数组,使其返回上述示例数组中的最后一个元素,即类别包含类别\u id\u数组中的所有类别\u id

谢谢,注意安全

您可以在
类别id\u数组中使用
.every()
,当
中存在
时,返回
true
。当前
类别中的某些()
对象的
类别id
类别id\u数组中的当前id(
c
)相等:

const posts_数组=[{id:1,类别:[{category_id:1,category_name:“one”},{category_id:2,category_name:“two”},},{id:2,category:[{category_id:1,category_name:“one”},{categegegegegegegory_id:3,categories:[{categority_id:1,categority_name:“one”},{categority_id:4,categority_name:“四”},{category_id:5,category_name:“五”},}];
函数filterPostsByCategoryId(类别id数组){
const custom_filter=d=>category_id_array.every(c=>d.categories.some(o=>o.category_id==c));
const filtered\u posts\u array=posts\u array.filter(自定义\u过滤器);
返回过滤后的\u posts\u数组;
}
const res=filterPostsByCategoryId([1,4]);
console.log(res);