JavaScript数组过滤嵌入式对象数组

时间:2018-05-25 03:46:49

标签: javascript arrays filter

如何过滤数组嵌入式对象数组? 我使用过滤器和一些,但结果不是我的。

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 :(得分:1)

我认为你需要过滤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); 

答案 1 :(得分:0)



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数组只有一个元素。如果不是,请告诉我