【问题标题】:Javascript array filter two searchboxJavascript数组过滤两个搜索框
【发布时间】:2019-11-14 17:33:51
【问题描述】:

如何使用两个字符串(搜索框)动态过滤数组值?到目前为止,这是我尝试过的:

if (!!this.searchCompany.toLowerCase() || !!this.searchName.toLowerCase()) {
  this.filter = true
  this.newval = this.list.filter(post => {
    if (!!this.searchCompany.toLowerCase()) {
      return post.profile.company ? post.profile.company.toLowerCase().includes(this.searchCompany.toLowerCase()) : null
    } else if (!!this.searchName.toLowerCase()) {
      return post.profile.full_name.toLowerCase().includes(this.searchName.toLowerCase())
    } else {
      return post
    }
  })

this.searchCompanythis.searchName 是我表单中的搜索框。

this.list

的数组内容

【问题讨论】:

  • 请添加您的input array

标签: javascript arrays filter include tostring


【解决方案1】:

UPD:

这是您的条件检查

if(!!this.searchCompany.toLowerCase())

它不检查值是否以小写形式出现。首先通过 String 方法将其转换为小写,然后转换为 boolean 类型。众所周知,空字符串转换为布尔值FALSE,任何非空字符串转换为TRUE。此外,如果searchCompany 属性没有出现在this 中,您会得到TypeError

这里是小例子 sn-p 如何在对象数组中搜索

const posts = [{
    company: 'Coca-Cola',
    name: 'Rocket'
  },
  {
    company: 'Pepsi-Cola',
    name: 'Groot'
  }
]
let form = document.forms['search-form']
let resultBox = document.querySelector('#result-box')
let searchButton = document.querySelector('#search')

searchButton.addEventListener('click', doSearch, false)

function searchPost(parameter, searchString) {
  return posts.find(post => post[parameter].toLowerCase().includes(searchString.toLowerCase()))
}

function isFormEmpty() {
  return [...form.children].filter(e => e.type === 'text').reduce((r, c) => r && !c.value.length, true)
}

function doSearch() {
  if (isFormEmpty(form)) {
    e.preventDefault()
    return false
  }
  let searchNameEl = form.querySelector('[name="searchName"]')
  let searchCompanyEl = form.querySelector('[name="searchCompany"]')
  let searchParam = searchCompanyEl.value.length ? 'company' : 'name'
  let searchText = searchCompanyEl.value.length ? searchCompanyEl.value : searchNameEl.value
  let post = searchPost(searchParam, searchText)
  resultBox.textContent = JSON.stringify(post)
}
form {
  display: block;
}

.result {
  margin-top: 10px;
}
<form id="search-form">
  <label>Search company</label>
  <input type="text" name="searchCompany" />

  <label>Search name</label>
  <input type="text" name="searchName" />

  <button type="button" id="search">Search</button>
</form>

<div class="result">
  <pre id="result-box"></pre>
</div>

【讨论】:

  • !!this.searchCompany.toLowerCase() 这是为了检查它是否有值并且应该是小写的。
猜你喜欢
  • 2020-05-30
  • 2022-01-13
  • 2018-12-25
  • 2022-01-02
  • 2021-12-16
  • 2019-04-14
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多