TypeError:this.results.filter 不是 Vuejs 搜索框中的函数

Posted

技术标签:

【中文标题】TypeError:this.results.filter 不是 Vuejs 搜索框中的函数【英文标题】:TypeError: this.results.filter is not a function in searchbox Vuejs 【发布时间】:2020-01-13 20:13:16 【问题描述】:

我一直在努力在 VueJS 2.0 中实现搜索功能。

我正在尝试复制我在*** 中获得的这段代码,但无法实现它。

我不知道我在哪里做错了。

结果是一个存储json数据的对象。

    <template>
  <section>
    <b-form-input v-model="searchQuery" placeholder="Search user by full name"></b-form-input>
    <div v-for="result in filteredResources" :key="result.id">
      <td>result.LONG_D</td>
    </div>
  </section>
</template>

<script>
import axios from "axios";
export default 
  data() 
    return 
      searchQuery: "",
      results: ,
      search: ""
    ;
  ,
  mounted() 
    this.getDiseases();
  ,
  methods: 
    getDiseases: function() 
      axios
        .get("http://localhost:9000/api/diseases/")
        .then(response => (this.results = response.data))
        .catch(error => console.log(error));
    
  ,
  computed: 
    /* Search Bar */
    filteredResources() 
      if (this.searchQuery) 
        return this.results.filter((item) => 
          return item.title.startsWith(this.searchQuery);
        );
       else 
        return this.results;
      
    
  
;
</script>

这是错误

TypeError: this.results.filter 不是函数

这是将存储在 result: 中的 json

【问题讨论】:

你不能在一个对象上调用.filter 那我该怎么办? Object.keys(this.results).filter((key) =&gt; this.results[key].title.startsWith(this.searchQuery)) 可能会起作用。 虽然不行 response.data 是一个数组吗?如果是这样,请将您的results 数据属性初始化为相同类型,即results: [] 【参考方案1】:

我建议直接使用 AJAX 响应中的 results 数组。

例如

data: () => (
  searchQuery: '',
  results: []
),
async created () 
  let  data  = await axios.get("http://localhost:9000/api/diseases/")
  this.results = data.results
,
computed: 
  filteredResources() 
    let normalizedQuery = this.searchQuery.trim().toLowerCase()
    if (normalizedQuery.length) 
      return this.results.filter(( LONG_D ) => 
          LONG_D.toLowerCase().startsWith(normalizedQuery))
    
    return this.results
  

你还应该修复你的模板

<div v-for="result in filteredResources">
  <p>result.LONG_D</p>
</div>

【讨论】:

嗨菲尔,为什么要使用异步?我不知道 asnyc 和你写的所有代码。 @Vin 因为它更短而且我讨厌滚动?。同axios.get(...).then(response =&gt; (this.results = response.data.results))

以上是关于TypeError:this.results.filter 不是 Vuejs 搜索框中的函数的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数