Javascript if语句里面返回

时间:2018-05-30 15:18:58

标签: javascript search vue.js filter return

我需要一些帮助。我有一个数组dir -r | Select Mode,LastWriteTime,Length,Name,Fullname | Out-GridView 作为来自父级的道具收到的对象。我需要根据其对象属性(allGames)等过滤此数组。用户可以在复选框,下拉列表或其他内容中输入过滤器值。我需要这些过滤器一起工作。

为此,我使用了两个额外的数组:一个名为venue, date, price,用于保存过滤后显示的游戏,另一个名为filteredGames,在输入时更新。

我设法使用以下代码正确过滤:

searchTerm

我遇到的问题是并非所有原始对象都是&#39;属性已填满。例如,游戏的<input type="text" name="date" v-model="searchTerm.date"> <input type="text" name="venue" v-model="searchTerm.venue"> <input type="text" name="price" v-model="searchTerm.price"> export defaults { props: { allGames: { type: Array, required: true } }, data: function () { return { filteredGames: [], searchTerm: { venue: '', date: '', price: '' } } }, watch: { searchTerm: { handler: function (val) { this.filterGames() this.$emit('input', val) }, deep: true } }, methods: { filterGames: function () { if (this.filteredGames.length === 0) { this.filteredGames = this.allGames } if (this.searchTerm.venue) { this.searchTerm.venue = this.searchTerm.venue.toLowerCase() } if (this.searchTerm && this.filteredGames) { this.filteredGames = this.allGames.filter(game => { return ( game.venue.toLowerCase().search(this.searchTerm.venue) >= 0 && game.date.search(this.searchTerm.date) >= 0 && game.price.search(this.searchTerm.price) >= 0 ) }) } } } } 列可能为空。如果发生这种情况,我会收到price,搜索根本无效。

有没有办法在return中添加Error in callback for watcher "searchTerm": "TypeError: game.price is null"语句?像if

这样的东西

我无法找到让它发挥作用的方法。如果不可能有替代方案吗?

我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

你可以这样做,只有在财产如此真实时才应用搜索:

这叫做

  

短路评估

 return (
      (game.venue && game.venue.toLowerCase().search(this.searchTerm.venue) >= 0) &&
      (game.date && game.date.search(this.searchTerm.date) >= 0) &&
      (game.price && game.price.search(this.searchTerm.price) >= 0)
    );

它有效,因为在JavaScript中,true && expression始终评估为expression,而false && expression始终评估为false.

修改即使1次搜索匹配,也使用||返回true:

return (
          (game.venue && game.venue.toLowerCase().search(this.searchTerm.venue) >= 0) ||
          (game.date && game.date.search(this.searchTerm.date) >= 0) ||
          (game.price && game.price.search(this.searchTerm.price) >= 0)
        );

编辑2 仅过滤用户输入的所有值并忽略其他值:

return (
        (!game.venue || game.venue.toLowerCase().search(this.searchTerm.venue) >= 0) &&
        (!game.date || game.date.search(this.searchTerm.date) >= 0) &&
        (!game.price || game.price.toString().search(this.searchTerm.price) >= 0)
      );