javascript - Vuejs 搜索栏过滤器不返回任何结果

标签 javascript arrays vue.js filter vue-component

今天我第一次开始使用 VUEjs,所以我尝试使用 JSON 从 URL 中获取数据。这工作得很好,但我想要通过添加搜索栏来获得更多。我在网上看了一些教程,我也照他们做的做了,但对我来说效果不是很好。在我的代码中添加 filter() 之后,我在屏幕上看不到任何东西。我现在卡住了,不知道我的代码做错了什么。

如果我写例如“比特币”,我想取回符号、名称和价格。

<div id="app">
   <input type="text" v-model="search" placeholder="search coin">

   <ul>
       <li v-for="coin in filteredCoins">
           {{ coin.symbol }} {{ coin.name }} {{ coin.quotes['USD']['price']}}
       </li>
   </ul>
</div>

<script src="https://unpkg.com/vue"></script>
<script>
const app = new Vue({
    el: '#app',
    data: {
        data: [],
        search: ''
    },
    computed: {
        filteredCoins: function() {
            return this.data.filter((coin) => {
                return coin.title.match(this.search);
            });
        }
    },
    created () {
        fetch('https://api.coinmarketcap.com/v2/ticker/')
            .then(response => response.json())
            .then(json => {
                this.data = json.data
            })
    }
})
</script>

Codepen

最佳答案

json.data 是一个对象,不是一个数组,所以你不能对它使用 filter。您需要将该对象转换为数组以对其进行过滤。您可以像 Bert 在他的代码笔中建议的那样做。

computed: {
  filteredCoins () {
    return Object.values(this.data).filter(coin => coin.name.toLowerCase().match(this.search.toLowerCase()))
  },
},

关于javascript - Vuejs 搜索栏过滤器不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139302/

相关文章:

javascript - 动态调整 Bootstrap 布局

javascript - 为什么 jQuery 3 不能识别属性选择器中的 '#' 字符?

javascript - 功能重启工作不正确

arrays - 字节数组到字符串和向后转换

c - 指向链表的指针数组

javascript - 使用服务器端渲染将 Web 应用程序导出为 pdf

vue.js - 带有 v-for 的动态 v 模型

javascript - 如何让子 div 在可调整大小的 Bootstrap 面板中占据父 div 的全部空间?

php - 使用 Compact 从 Controller 传递数组以查看 Laravel

javascript - Vue.js ES6 导入导出