>source

이 질문은이 하나와 유사합니다. jQuery 필터 루프가있는 객체의 배열그러나 이번에는 객체 배열로 필터를 수행해야합니다.

exemple :

다음과 같이 객체의 배열이 있습니다.

myArray= [
{
    userid: "100",
    projectid: "10",
    rowid: "0"
},
{
    userid: "101",
    projectid: "11",
    rowid: "1"},
{
    userid: "102",
    projectid: "12",
    rowid: "2"},
{
    userid: "103",
    projectid: "13",
    rowid: "3"
},
{
    userid: "101",
    projectid: "10",
    rowid: "4"
}
...]

다음과 같이 배열로 필터링하고 싶습니다.

myFilter= [
{
    userid: "101",
    projectid: "11"
},
{
    userid: "102",
    projectid: "12"
},
{
    userid: "103",
    projectid: "11"
}]

(myFilter에서 사용자 ID와 ProjectID가 MyArray의 사용자 ID와 ProjectID와 일치해야 함)을 반환합니다.

myArrayFiltered= [
{
    userid: "101",
    projectid: "11",
    rowid: "1"
},
{
    userid: "102",
    projectid: "12",
    rowid: "2"
}]

어떻게 할 수 있습니까?

  • 답변 # 1

    var filtered= [];
    for(var arr in myArray){
       for(var filter in myFilter){
           if(myArray[arr].userid== myFilter[filter].userid &
    &
     myArray[arr].projectid== myFilter[filter].projectid){
              filtered.push(myArray[arr].userid);
             }
       }
    }
    console.log(filtered);
    

  • 답변 # 2

    var arr1=[
        {
        name:'r',
        type:"t1"
    },
    {
        name:'i',
        type:"t2"
    },
    {
        name:'n',
        type:"t1"
    }
    ]
    var arr2=[
        {
        name:'r',
        type:"t1"
    },
    {
        name:'i',
        type:"t2"
    },
    {
        name:'n',
        type:"t3"
    }
    ]
    let output= arr1.filter(x=> !arr2.find(y=> (y.name== x.name &
    &
     y.type== x.type)))
    console.log(output)
    //inverted
    output= arr1.filter(x=> !!arr2.find(y=> (y.name== x.name &
    &
     y.type== x.type)))
        console.log(output)
    

  • 답변 # 3

    에 대한 응답으로 앤디위의 답변은 지금 답변으로 표시되어야한다고 믿습니다. 정반대의 행동을 찾고 있다면, 이와 같은 것과 같은 무언가로 사용하십시오.

    const result= masterData.filter(ad=>             filterData.every(fd=> fd.userid !== md.userid));
    

    ​​결과포함되어있다모든 masterdata. filterData를 제외하고...에

  • 답변 # 4

    @ 렌 트의 답변을 기반으로하지만 더 짧은 :

    const myArray= [{ userid: "100", projectid: "10", rowid: "0" }, ...];
    const myFilter= [{ userid: "101", projectid: "11" }, ...];
    const myArrayFiltered= myArray.filter(array=> myFilter.some(filter=> filter.userid=== array.userid &
    &
     filter.projectid=== array.projectid));
    

  • 답변 # 5

    여기에 몇 개의 배열 방법을 넣을 수 있습니다. 최근 최근 브라우저에서 사용할 수 있으며 구형 브라우저에서 사용할 수있는 폴리필이 있습니다.

    const myArray= [{ userid: "100", projectid: "10", rowid: "0" }, { userid: "101", projectid: "11", rowid: "1"}, { userid: "102", projectid: "12", rowid: "2" }, { userid: "103", projectid: "13", rowid: "3" }, { userid: "101", projectid: "10", rowid: "4" }];
    const myFilter= [{ userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103",  projectid: "11"}];
    const myArrayFiltered= myArray.filter((el)=> {
      return myFilter.some((f)=> {
        return f.userid=== el.userid &
    &
     f.projectid=== el.projectid;
      });
    });
    console.log(myArrayFiltered);

    환상적인! 루프를 사용하는 것보다 낫습니다! 훨씬 더 간결합니다

    NiallMitch142021-05-12 07:58:03

    안녕하세요 @andy, 나는 그 한 가지 조건이 같지 않은 것과 같지 않은 것과 똑같은 일을하고 있습니다!== 그러나 그것은 내 사건에서 작동하지 않습니다. 조건과 동등하지 않은 것과 동일하게 작동하는 다른 방법이 있습니까? 내 라이브 예제를 여기에서 확인하십시오 : playcode.io/586682.

    TMA2021-05-12 10:50:51
  • 답변 # 6

    ECMA 스크립트 6.

    const myArrayFiltered= myArray.filter( el=> {
      return myfilter.some( f=> {
        return f.userid=== el.userid &
    &
     f.projectid=== el.projectid;
      });
    });
    

    함수 :

    const filterObjectArray= (arr, filterArr)=> (
        arr.filter( el=>        filterArr.some( f=>            f.userid=== el.userid &
    &
     f.projectid=== el.projectid
            )
        )
    );
    console.log(filterObjectArray(myArray, myFilter))
    

    예제와 링크하십시오

  • 답변 # 7

    이 code는 사용자 ID 및 ProjectID뿐만 아니라 MyFilter [J]의 모든 속성과 일치합니다.

    var filtered= myArray.filter(function(i){
        return myFilter.some(function(j){
            return !Object.keys(j).some(function(prop){
                return i[prop] != j[prop];
            });
        });
    });
    console.log(filtered);
    

    그래서 당신이 사용할 수 있습니다

    myFilter= [
        {
            projectid: "11"
        },
        {
            userid: "101"
        },
        {
            userid: "103",
            projectid: "13",
            rowid: "3"
        }
    ];
    

    는 반환됩니다

    [ { userid: '101', projectid: '11', rowid: '1' },
    { userid: '103', projectid: '13', rowid: '3' },
    { userid: '101', projectid: '10', rowid: '4' } ]
    

    WICH는 모든 요소를 ​​의미합니다

    (projectid=="11")
    OR (userid=="101")
    OR ( (userid=="103") AND (projectid=="13") AND (rowid=="3") )
    

  • 답변 # 8

    jQuery Map을 사용할 수 있습니다.이 항목은 일치 항목을 반환합니다.

    var _filter=function(arr_data,arr_filter){
        return $.map( arr_data, function( n ) {
            for(var f in arr_filter){
                if(arr_filter[f].userid== n.userid &
    &
     arr_filter[f].projectid== n.projectid){
                    return n;
                }
            }
        });
    }
    var resp= _filter(myArray,myFilter);
    console.log(resp);
    

  • 답변 # 9

    이와 같은 모든 필터가 필요할 경우 키가 일치하는 속성을 해시하는 데 필요한 사전 (객체)을 만들려면 (이 경우 사용자 ID & protuctID) 그런 식으로 제 2 차 Dict (바늘)에서 키를 사용할 수 있는지 확인하기 위해 첫 번째 Dict (Haystack)를 반복해야합니다. 도움이 되었기를 바랍니다.

  • 답변 # 10

    첫 번째 배열을 반복해야 하며이 루프 내부에서 필터 내부를 다시 루프해야합니다.

    사용자 ID 및 ProjectID가 동일하면 필터링 된 배열에 행을 추가 할 수 있습니다.

    myArray= [{
        userid: "100",
        projectid: "10",
        rowid: "0"
    }, {
        userid: "101",
        projectid: "11",
        rowid: "1"
    }, {
        userid: "102",
        projectid: "12",
        rowid: "2"
    }, {
        userid: "103",
        projectid: "13",
        rowid: "3"
    }, {
        userid: "101",
        projectid: "10",
        rowid: "4"
    }];
    myFilter= [{
        userid: "101",
        projectid: "11"
    }, {
        userid: "102",
        projectid: "12"
    }, {
        userid: "103",
        projectid: "11"
    }];
    function filterArray(array, filter) {
        var myArrayFiltered= [];
        for (var i= 0; i < array.length; i++) {
            for (var j= 0; j < filter.length; j++) {
                if (array[i].userid=== filter[j].userid &amp;
    &amp;
     array[i].projectid=== filter[j].projectid) {
                    myArrayFiltered.push(array[i]);
                }
            }
        }
        return myArrayFiltered;
    }
    myArrayFiltered= filterArray(myArray, myFilter);
    console.log(myArrayFiltered);
    

    jsfiddle.

  • 이전 PHP in_array ()는 범위에서 30.33을 찾을 수 없습니다 (0, 40, 0.01)
  • 다음 android : Bugreport Manager 서비스가 AOSP 10으로 사용되지 않습니까?