Filter nested array in object array by array of values

前端 未结 2 1964
旧时难觅i
旧时难觅i 2020-12-10 15:45

Considering below object array:

[
    {
        \"guid\": \"j5Dc9Z\",            
        \"courses\": [
            {
                \"id\": 1,
                    


        
相关标签:
2条回答
  • 2020-12-10 16:39

    try this,

    results = [
            {
                "guid": "j5Dc9Z",            
                "courses": [
                    {
                        "id": 3,
                        "name": "foo",                    
                    }
                ]
            },
            {
                "guid": "a5gdfS",
                "courses": [
                    {
                        "id": 1,
                        "name": "bar",                    
                    },
                    {
                        "id": 3,
                        "name": "foo",                    
                    },    
                ]
             } 
        ]
    
    var filter = [1]
    console.log(results.map(result=>{
          result.courses = result.courses.filter(course=>(filter.includes(course.id)))
          return result
        }))

    0 讨论(0)
  • 2020-12-10 16:41

    If you're trying to filter the elements whose course IDs contain in the filter.courses, you may use Array#every and Array#includes to do that:

    const data = [{"guid":"j5Dc9Z","courses":[{"id":3,"name":"foo"}]},{"guid":"a5gdfS","courses":[{"id":1,"name":"bar"},{"id":3,"name":"foo"}]},{"guid":"jHab6i","courses":[{"id":7,"name":"foobar"}]}];
    const courses = [1, 6, 3];
    
    const r = data.filter(d => d.courses.every(c => courses.includes(c.id)));
    console.log(r);

    0 讨论(0)
提交回复
热议问题