JavaScript массив фильтрации встроенного объекта массив - PullRequest
0 голосов
/ 25 мая 2018

как отфильтровать массив встроенного объекта в массив?Я использую фильтр и некоторые, но результат не мой, хотя.

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 ]

0 голосов
/ 25 мая 2018

Я думаю, вам нужно отфильтровать массив scenarios и массив contacts.Если вы хотите получить сценарий, в котором есть хотя бы один контакт с resourceId === "001", вы можете сделать следующее.

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); 
0 голосов
/ 25 мая 2018

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 будет иметь только один элемент.Дайте мне знать, если это не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...