简体   繁体   English

如何从javascript中的数组中过滤数据

[英]How to filter data from array in javascript

Hi I have below array in my application.嗨,我的应用程序中有以下数组。 I want to make three lists on basis of this array.我想在这个数组的基础上制作三个列表。

[ 'type addPet {\n  # default field\n  empty: String\n}',
  'type createUser {\n  # default field\n  empty: String\n}',
  'type createUsersWithArrayInput {\n  # default field\n  empty: String\n}',
  'type createUsersWithListInput {\n  # default field\n  empty: String\n}',
  'type deleteOrder {\n  # default field\n  empty: String\n}',
  'type deletePet {\n  # default field\n  empty: String\n}',
  'type deleteUser {\n  # default field\n  empty: String\n}',
  'type findPetsByStatus_items {\n  id: String\n  category: findPetsByStatus_items_category\n  name: String\n  photoUrls: [String]\n  tags: [findPetsByStatus_items_tags_items]\n\n  # pet status in the store\n  status: String\n}',
  'type findPetsByStatus_items_category {\n  id: String\n  name: String\n}',
  'type findPetsByStatus_items_tags_items {\n  id: String\n  name: String\n}',
  'type findPetsByTags_items {\n  id: String\n  category: findPetsByTags_items_category\n  name: String\n  photoUrls: [String]\n  tags: [findPetsByTags_items_tags_items]\n\n  # pet status in the store\n  status: String\n}',
  'type findPetsByTags_items_category {\n  id: String\n  name: String\n}',
  'type findPetsByTags_items_tags_items {\n  id: String\n  name: String\n}',
  'type getInventory {\n  # default field\n  empty: String\n}',
  'type getOrderById {\n  id: String\n  petId: String\n  quantity: Int\n  shipDate: String\n\n  # Order Status\n  status: String\n  complete: Boolean\n}',
  'type getPetById {\n  id: String\n  category: getPetById_category\n  name: String\n  photoUrls: [String]\n  tags: [getPetById_tags_items]\n\n  # pet status in the store\n  status: String\n}',
  'type getPetById_category {\n  id: String\n  name: String\n}',
  'type getPetById_tags_items {\n  id: String\n  name: String\n}',
  'type getUserByName {\n  id: String\n  username: String\n  firstName: String\n  lastName: String\n  email: String\n  password: String\n  phone: String\n\n  # User Status\n  userStatus: Int\n}',
  'type loginUser {\n  # default field\n  empty: String\n}',
  'type logoutUser {\n  # default field\n  empty: String\n}',
  'type Mutation {\n  addPet(body: param_addPet_body): addPet\n  updatePet(body: param_updatePet_body): updatePet\n  updatePetWithForm(petId: String, name: String, status: String): updatePetWithForm\n  deletePet(api_key: String, petId: String): deletePet\n  placeOrder(body: param_placeOrder_body): placeOrder\n\n  # For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors\n  deleteOrder(orderId: String): deleteOrder\n\n  # This can only be done by the logged in user.\n  createUser(body: param_createUser_body): createUser\n  createUsersWithArrayInput(body: param_createUsersWithArrayInput_body): createUsersWithArrayInput\n  createUsersWithListInput(body: param_createUsersWithListInput_body): createUsersWithListInput\n\n  # This can only be done by the logged in user.\n  updateUser(username: String, body: param_updateUser_body): updateUser\n\n  # This can only be done by the logged in user.\n  deleteUser(username: String): deleteUser\n}',
  '# Pet object that needs to be added to the store\ninput param_addPet_body {\n  # default field\n  empty: String\n}',
  '# Created user object\ninput param_createUser_body {\n  # default field\n  empty: String\n}',
  '# List of user object\ninput param_createUsersWithArrayInput_body {\n  # default field\n  empty: String\n}',
  '# List of user object\ninput param_createUsersWithListInput_body {\n  # default field\n  empty: String\n}',
  '# order placed for purchasing the pet\ninput param_placeOrder_body {\n  # default field\n  empty: String\n}',
  '# Pet object that needs to be added to the store\ninput param_updatePet_body {\n  # default field\n  empty: String\n}',
  '# Updated user object\ninput param_updateUser_body {\n  # default field\n  empty: String\n}',
  'type placeOrder {\n  id: String\n  petId: String\n  quantity: Int\n  shipDate: String\n\n  # Order Status\n  status: String\n  complete: Boolean\n}',
  'type Query {\n  viewer: viewer\n}',
  'type updatePet {\n  # default field\n  empty: String\n}',
  'type updatePetWithForm {\n  # default field\n  empty: String\n}',
  'type updateUser {\n  # default field\n  empty: String\n}',
  'type viewer {\n  # Multiple status values can be provided with comma separated strings\n  findPetsByStatus(status: [String]): [findPetsByStatus_items]\n\n  # Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.\n  findPetsByTags(tags: [String]): [findPetsByTags_items]\n\n  # Returns a single pet\n  getPetById(petId: String): getPetById\n\n  # Returns a map of status codes to quantities\n  getInventory: getInventory\n\n  # For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions\n  getOrderById(orderId: String): getOrderById\n  loginUser(username: String, password: String): loginUser\n  logoutUser: logoutUser\n  getUserByName(username: String): getUserByName\n}' ]

In this array I want to make three lists.在这个数组中,我想制作三个列表。 One list contains一份清单包含

type Mutation {\n  addPet(body: param_addPet_body): addPet\n  updatePet(body: param_updatePet_body): updatePet\n  updatePetWithForm(petId: String, name: String, status: String): updatePetWithForm\n  deletePet(api_key: String, petId: String): deletePet\n  placeOrder(body: param_placeOrder_body): placeOrder\n\n  # For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors\n  deleteOrder(orderId: String): deleteOrder\n\n  # This can only be done by the logged in user.\n  createUser(body: param_createUser_body): createUser\n  createUsersWithArrayInput(body: param_createUsersWithArrayInput_body): createUsersWithArrayInput\n  createUsersWithListInput(body: param_createUsersWithListInput_body): createUsersWithListInput\n\n  # This can only be done by the logged in user.\n  updateUser(username: String, body: param_updateUser_body): updateUser\n\n  # This can only be done by the logged in user.\n  deleteUser(username: String): deleteUser\n}

Second list contains第二个列表包含

type viewer {\n  # Multiple status values can be provided with comma separated strings\n  findPetsByStatus(status: [String]): [findPetsByStatus_items]\n\n  # Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.\n  findPetsByTags(tags: [String]): [findPetsByTags_items]\n\n  # Returns a single pet\n  getPetById(petId: String): getPetById\n\n  # Returns a map of status codes to quantities\n  getInventory: getInventory\n\n  # For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions\n  getOrderById(orderId: String): getOrderById\n  loginUser(username: String, password: String): loginUser\n  logoutUser: logoutUser\n  getUserByName(username: String): getUserByName\n}

and third list should contains exclude below items, should have rest of the items of the above array.第三个列表应包含排除以下项目,应包含上述数组的其余项目。

type Query {\n  viewer: viewer\n}
type viewer {\n  # Multiple status values can be provided with comma separated strings\n  findPetsByStatus(status: [String]): [findPetsByStatus_items]\n\n  # Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.\n  findPetsByTags(tags: [String]): [findPetsByTags_items]\n\n  # Returns a single pet\n  getPetById(petId: String): getPetById\n\n  # Returns a map of status codes to quantities\n  getInventory: getInventory\n\n  # For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions\n  getOrderById(orderId: String): getOrderById\n  loginUser(username: String, password: String): loginUser\n  logoutUser: logoutUser\n  getUserByName(username: String): getUserByName\n}
type Mutation {\n  addPet(body: param_addPet_body): addPet\n  updatePet(body: param_updatePet_body): updatePet\n  updatePetWithForm(petId: String, name: String, status: String): updatePetWithForm\n  deletePet(api_key: String, petId: String): deletePet\n  placeOrder(body: param_placeOrder_body): placeOrder\n\n  # For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors\n  deleteOrder(orderId: String): deleteOrder\n\n  # This can only be done by the logged in user.\n  createUser(body: param_createUser_body): createUser\n  createUsersWithArrayInput(body: param_createUsersWithArrayInput_body): createUsersWithArrayInput\n  createUsersWithListInput(body: param_createUsersWithListInput_body): createUsersWithListInput\n\n  # This can only be done by the logged in user.\n  updateUser(username: String, body: param_updateUser_body): updateUser\n\n  # This can only be done by the logged in user.\n  deleteUser(username: String): deleteUser\n}

Does anyone know how to do this in javascript ?有谁知道如何在 javascript 中做到这一点?

Use Array#reduce to iterate the array.使用Array#reduce迭代数组。 Get the type string using regex.使用正则表达式获取类型字符串。 Get the relevant array from the Map r , and push to the array.Map r获取相关数组,并推送到该数组。 Return r (the accumulator).返回r (累加器)。 When reduce is done, use Map#values and spread to get an array of arrays, and destructure to separate variables.当reduce完成后,使用Map#valuesspread得到一个数组,并解构分离变量。

 const data = ["type addPet {\\n # default field\\n empty: String\\n}","type createUser {\\n # default field\\n empty: String\\n}","type createUsersWithArrayInput {\\n # default field\\n empty: String\\n}","type createUsersWithListInput {\\n # default field\\n empty: String\\n}","type deleteOrder {\\n # default field\\n empty: String\\n}","type deletePet {\\n # default field\\n empty: String\\n}","type deleteUser {\\n # default field\\n empty: String\\n}","type findPetsByStatus_items {\\n id: String\\n category: findPetsByStatus_items_category\\n name: String\\n photoUrls: [String]\\n tags: [findPetsByStatus_items_tags_items]\\n\\n # pet status in the store\\n status: String\\n}","type findPetsByStatus_items_category {\\n id: String\\n name: String\\n}","type findPetsByStatus_items_tags_items {\\n id: String\\n name: String\\n}","type findPetsByTags_items {\\n id: String\\n category: findPetsByTags_items_category\\n name: String\\n photoUrls: [String]\\n tags: [findPetsByTags_items_tags_items]\\n\\n # pet status in the store\\n status: String\\n}","type findPetsByTags_items_category {\\n id: String\\n name: String\\n}","type findPetsByTags_items_tags_items {\\n id: String\\n name: String\\n}","type getInventory {\\n # default field\\n empty: String\\n}","type getOrderById {\\n id: String\\n petId: String\\n quantity: Int\\n shipDate: String\\n\\n # Order Status\\n status: String\\n complete: Boolean\\n}","type getPetById {\\n id: String\\n category: getPetById_category\\n name: String\\n photoUrls: [String]\\n tags: [getPetById_tags_items]\\n\\n # pet status in the store\\n status: String\\n}","type getPetById_category {\\n id: String\\n name: String\\n}","type getPetById_tags_items {\\n id: String\\n name: String\\n}","type getUserByName {\\n id: String\\n username: String\\n firstName: String\\n lastName: String\\n email: String\\n password: String\\n phone: String\\n\\n # User Status\\n userStatus: Int\\n}","type loginUser {\\n # default field\\n empty: String\\n}","type logoutUser {\\n # default field\\n empty: String\\n}","type Mutation {\\n addPet(body: param_addPet_body): addPet\\n updatePet(body: param_updatePet_body): updatePet\\n updatePetWithForm(petId: String, name: String, status: String): updatePetWithForm\\n deletePet(api_key: String, petId: String): deletePet\\n placeOrder(body: param_placeOrder_body): placeOrder\\n\\n # For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors\\n deleteOrder(orderId: String): deleteOrder\\n\\n # This can only be done by the logged in user.\\n createUser(body: param_createUser_body): createUser\\n createUsersWithArrayInput(body: param_createUsersWithArrayInput_body): createUsersWithArrayInput\\n createUsersWithListInput(body: param_createUsersWithListInput_body): createUsersWithListInput\\n\\n # This can only be done by the logged in user.\\n updateUser(username: String, body: param_updateUser_body): updateUser\\n\\n # This can only be done by the logged in user.\\n deleteUser(username: String): deleteUser\\n}","# Pet object that needs to be added to the store\\ninput param_addPet_body {\\n # default field\\n empty: String\\n}","# Created user object\\ninput param_createUser_body {\\n # default field\\n empty: String\\n}","# List of user object\\ninput param_createUsersWithArrayInput_body {\\n # default field\\n empty: String\\n}","# List of user object\\ninput param_createUsersWithListInput_body {\\n # default field\\n empty: String\\n}","# order placed for purchasing the pet\\ninput param_placeOrder_body {\\n # default field\\n empty: String\\n}","# Pet object that needs to be added to the store\\ninput param_updatePet_body {\\n # default field\\n empty: String\\n}","# Updated user object\\ninput param_updateUser_body {\\n # default field\\n empty: String\\n}","type placeOrder {\\n id: String\\n petId: String\\n quantity: Int\\n shipDate: String\\n\\n # Order Status\\n status: String\\n complete: Boolean\\n}","type Query {\\n viewer: viewer\\n}","type updatePet {\\n # default field\\n empty: String\\n}","type updatePetWithForm {\\n # default field\\n empty: String\\n}","type updateUser {\\n # default field\\n empty: String\\n}","type viewer {\\n # Multiple status values can be provided with comma separated strings\\n findPetsByStatus(status: [String]): [findPetsByStatus_items]\\n\\n # Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.\\n findPetsByTags(tags: [String]): [findPetsByTags_items]\\n\\n # Returns a single pet\\n getPetById(petId: String): getPetById\\n\\n # Returns a map of status codes to quantities\\n getInventory: getInventory\\n\\n # For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions\\n getOrderById(orderId: String): getOrderById\\n loginUser(username: String, password: String): loginUser\\n logoutUser: logoutUser\\n getUserByName(username: String): getUserByName\\n}"]; const [arr1, arr2, arr3] = [...data.reduce((r, row) => { const [typeStr] = row.match(/^type\\s[^\\s]+/i) || []; const subArr = r.has(typeStr) ? r.get(typeStr) : r.get('other'); subArr.push(row); return r; }, new Map([['type Mutation', []], ['type viewer', []], ['other', []]])).values()]; console.log(arr1); console.log(arr2); console.log(arr3);

The code is trivial ... or I didn't get the request代码很简单……或者我没有收到请求

const array = [...]

const list0 = [], list1 = [], list2 = []
for(const row of array) {
  if(row.indexOf('type Mutation') === 0)
    list0.push(row)
  else if(row.indexOf('type viewer') === 0)
    list1.push(row)
  else if(row.indexOf('type Query') === -1)
    list2.push(row)
}

If you are looking to do it by text content, you can use the array filter function from javascript, and match text occurence (case insensitive).如果您希望通过文本内容来实现,您可以使用 javascript 中的数组过滤器功能,并匹配文本出现(不区分大小写)。 This is a very basic example (not tested):这是一个非常基本的示例(未测试):

var list1 = GetMatchingEntries("type Mutation");

function GetMatchingEntries(matchingText){
    return yourArray.filter(function(textEntry){
              return textEntry.toUpperCase().indexOf(matchingText.toUpperCase()) !== -1;
           });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM