【发布时间】:2018-06-23 11:02:09
【问题描述】:
我有以下代码来过滤表格。我从age 之类的下拉列表中选择一列,然后从< 之类的另一个下拉列表中选择运算符并搜索20 之类的输入,并希望在它们上搜索表。
过滤器:
// Select column name
<select class="dv-header-select" v-model="query.search_column">
<option v-for="column in columns" :value="column">{{column}}</option>
</select>
// Select condition(<,>,<=,>=)
<select class="dv-header-select" v-model="query.search_operator">
<option v-for="(value, key) in operators" :value="key">{{value}}</option>
</select>
// Search value
<input type="text" class="dv-header-input" placeholder="Search"
v-model="query.search_input">
请阅读 JS 部分中的代码 cmets 了解。
<tr v-for="row in getSearchedRow">
<td v-for="(value, key) in row">{{value}}</td>
</tr>
JS:
data() {
return {
model: { data: [] },
// populating on API call
columns: {},
query: {
search_column: 'id',
search_operator: 'equal',
search_input: ''
}
},
getSearchedRow: function() {
return this.model.data.filter(row => {
let value = row[this.query.search_column];
for(var key in row){
if(String(row[key]).indexOf(this.query.search_input) !== -1){
// Return true required to populate table
if(this.query.search_column.length < 1) {
return true;
}
// when condition gets here, The table shows 0 records
if(this.query.search_operator == 'less_than') {
return value < this.query.search_input;
}
}
}
});
}
表格因第一个 if() 而被填充,但第二个 if() 显示为空。
我错过了什么?
【问题讨论】:
-
此时
value和this.query.search_input的实际值是多少?可能是您试图将两者作为数字进行比较,但它们实际上是字符串?著名的"2">"10"在 Javascript 中返回true。 -
@sjaustirni
value的值是选定的表列值。目前就像我只有三行一样,当您选择一列例如 id 时,值是22,23,24..... 而this.query.search_input是我要搜索的搜索字符串,例如,从下拉列表中选择的列是age,从下拉列表中选择的条件是>,this.query.search_input是 20。 -
您是否会通过将
strings 解析为int来确保这两个变量都是数字并报告它是否有帮助?这可能会有所帮助:stackoverflow.com/questions/5630123/… -
不,它不适用于
string和int -
嗯。由于我缺乏上下文知识,我看不出哪里可能出错。你能举一个这种行为的 MCVE 例子吗?
标签: javascript object search vue.js