>source

아래의 객체 배열을 고려해 둡니다.

[
    {
        "guid": "j5Dc9Z",
        "courses": [
            {
                "id": 1,
                "name": "foo",
            }
        ]
    },
    {
        "guid": "a5gdfS",
        "courses": [
            {
                "id": 2,
                "name": "bar",
            },
            {
                "id": 3,
                "name": "foo",
            },
        ]
     },
     {
        "guid": "jHab6i",
        "courses": [
            {
                "id": 4,
                "name": "foobar",
            }
        ]
     },
     {...}
]

오브젝트 배열을 필터링하고 중첩 된 ID를 비교하려고합니다.과정아래 배열이있는 배열 :

filter.courses= [1,3]

다음 줄은 배열의 n 번째 값에 대해 작동합니다. (비아 https://stackoverflow.com/a/41347441/9766768.)

let fil= filter(this.results, { courses: [{ id: this.filter.courses[n] }]});

그러나이 (아래의 의사 code)를 얻고 싶습니다.

let fil= filter(this.results, { courses: [{ id: this.filter.courses }]});

예상 출력은이 경우 다음과 같은 코스 IDS 요소가 포함 된 객체의 배열이 될 것입니다.

[
    {
        "guid": "j5Dc9Z",
        "courses": [
            {
                "id": 1,
                "name": "foo",
            }
        ]
    },
    {
        "guid": "a5gdfS",
        "courses": [
            {
                "id": 2,
                "name": "bar",
            },
            {
                "id": 3,
                "name": "foo",
            },
        ]
     }
]

이 경우에 가장 좋은 해결책으로 간주되는 것은 무엇입니까? 루프를 피하는 것은 보너스가 될 것입니다.

  • 답변 # 1

    코스 ID가 포함 된 요소를 필터링하려는 경우필터 .courses., 당신은 사용할 수 있습니다Array # Arty.배열 # 포함하기 위해서:

    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);

  • 답변 # 2

    코스 ID가 포함 된 요소를 필터링하려는 경우필터 .courses., 당신은 사용할 수 있습니다Array # Arty.배열 # 포함하기 위해서:

    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);

  • 답변 # 3

    내 재귀 적 솔루션을 탐색하십시오.

    이 솔루션은 최상위 레벨에서 Botton 레벨에서 Layer by Layer로 필터링되는 오브젝트의 중첩 된 배열을 중첩 할 수 있습니다.

  • 답변 # 4

    내 재귀 적 솔루션을 탐색하십시오.

    이 솔루션은 최상위 레벨에서 Botton 레벨에서 Layer by Layer로 필터링되는 오브젝트의 중첩 된 배열을 중첩 할 수 있습니다.

  • 답변 # 5

    이것을 시도해보십시오,

    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
        }))

  • 답변 # 6

    이것을 시도해보십시오,

    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
        }))

  • 이전 r : GGPLOT2를 사용하여 향후 개별 관찰 및 그룹을 플로팅하는 방법
  • 다음 스프링 부팅 응용 프로그램이 요청 받기를 중지합니다