bugfix> javascript > 投稿

配列埋め込みオブジェクト配列をフィルタリングする方法は? 私はフィルターといくつかを使用していますが、結果は私のものではありません。

var data = [
  {
    "app": "mail",
    "scenarios": [
      {
        "name": "",
        "description": "plugin 1",
        "contacts": [
          {
            "resourceId": "001",
            "isPrimary": false
          }
        ]
      },
      {
        "name": "app2",
        "description": "plugin 2",
        "contacts": [
          {
            "resourceId": "002",
            "isPrimary": false
          }
        ]
      }
    ]
  },
  {
    "app": "mail2",
    "scenarios": [
      {
        "name": "app1",
        "description": "plugin 1",
        "contacts": [
          {
            "resourceId": "001",
            "isPrimary": false
          }
        ]
      },
      {
        "name": "app2",
        "description": "plugin 2",
        "contacts": [
          {
            "resourceId": "002",
            "isPrimary": false
          }
        ]
      }
    ]
  }
];
result = data.filter(app => app.scenarios.some(scenario => scenario.contacts.some(concact => concact.resourceId == '001')));

データをフィルタリングしたい

[
  {
    "app": "mail",
    "scenarios": [
      {
        "name": "",
        "description": "plugin 1",
        "contacts": [
          {
            "resourceId": "001",
            "isPrimary": false
          }
        ]
      }
    ]
  },
  {
    "app": "mail2",
    "scenarios": [
      {
        "name": "app1",
        "description": "plugin 1",
        "contacts": [
          {
            "resourceId": "001",
            "isPrimary": false
          }
        ]
      }
    ]
  }
]

var data = [{"app":"mail","scenarios":[{"name":"","description":"plugin 1","contacts":[{"resourceId":"001","isPrimary":false}]},{"name":"app2","description":"plugin 2","contacts":[{"resourceId":"002","isPrimary":false}]}]},{"app":"mail2","scenarios":[{"name":"app1","description":"plugin 1","contacts":[{"resourceId":"001","isPrimary":false}]},{"name":"app2","description":"plugin 2","contacts":[{"resourceId":"002","isPrimary":false}]}]}];
result = data.filter(app => app.scenarios.some(scenario => scenario.contacts.some(concact => concact.resourceId == '001')));
console.log(result);

回答 2 件
  • scenarios をフィルタリングする必要があると思います  配列と contacts  両方を配列します。 resourceId === "001" と少なくとも1つの連絡先があるシナリオを取得する場合  次のことができます。

    let data = [
      {
        "app": "mail",
        "scenarios": [
          {
            "name": "",
            "description": "plugin 1",
            "contacts": [
              {
                "resourceId": "001",
                "isPrimary": false
              }
            ]
          },
          {
            "name": "app2",
            "description": "plugin 2",
            "contacts": [
              {
                "resourceId": "002",
                "isPrimary": false
              }
            ]
          }
        ]
      },
      {
        "app": "mail2",
        "scenarios": [
          {
            "name": "app1",
            "description": "plugin 1",
            "contacts": [
              {
                "resourceId": "001",
                "isPrimary": false
              }
            ]
          },
          {
            "name": "app2",
            "description": "plugin 2",
            "contacts": [
              {
                "resourceId": "002",
                "isPrimary": false
              }
            ]
          }
        ]
      }
    ];
     
    for(let item of data) {
       item.scenarios = item.scenarios.filter(value => {
          let validContacts = value.contacts.filter(contact => {
             return contact.resourceId === "001";
          })
          return validContacts.length > 0;
       })
    }
    console.log(data);
    
    

  • var data = [
      {
        "app": "mail",
        "scenarios": [
          {
            "name": "",
            "description": "plugin 1",
            "contacts": [
              {
                "resourceId": "001",
                "isPrimary": false
              }
            ]
          },
          {
            "name": "app2",
            "description": "plugin 2",
            "contacts": [
              {
                "resourceId": "002",
                "isPrimary": false
              }
            ]
          }
        ]
      },
      {
        "app": "mail2",
        "scenarios": [
          {
            "name": "app1",
            "description": "plugin 1",
            "contacts": [
              {
                "resourceId": "001",
                "isPrimary": false
              }
            ]
          },
          {
            "name": "app2",
            "description": "plugin 2",
            "contacts": [
              {
                "resourceId": "002",
                "isPrimary": false
              }
            ]
          }
        ]
      }
    ];
    data.forEach(dat => {
     dat.scenarios = dat.scenarios.find(da => da.contacts.find(x=>x.resourceId === "001"));
    });
    console.log(data)
    
    

    あなたが探しているものに適合するかどうかを確認するためにコードを調べることができます。どの contacts  配列には要素が1つしかありません。それ以外の場合は教えてください

あなたの答え