【发布时间】:2019-08-16 03:50:22
【问题描述】:
我正在构建基于 React 的轻量级 MS Excel。我目前正在构建一个过滤系统,该系统将允许根据过滤器输入过滤行 - 每列对应一个。如果您只过滤一列,它就可以正常工作。
问题:如果我决定基于多于 1 列进行过滤,则最新的过滤优先并忽略所有以前的过滤,就像它们不存在一样。
我假设我知道问题出在哪里。在当前的形状中,我的脚本总是过滤存储在 preSearch 数组中的数据,该数组总是存储旧的原始数据 (const)。我尝试通过所有过滤器输入执行循环,但我未能在 Array.prototype.filter() 方法中使用 && 加入所有条件。
点击切换搜索按钮后会生成:
showSearchInputs() {
if (this.state.toggleSearch === true) {
return (
<tr onChange={(e) => this._searchData(e)}>
{
this.props.headers.map((a, b) => {
return (
<td key={b}><input data-idx={b} type="text" style={{fontSize: '11px', width: '150px'}} /></td>
)
})
}
</tr>
)
}
else {
return null
}
}
还有一个监听数据变化的方法:
_searchData(e) {
console.log(e.target.dataset.idx, e.target.value);
if (!e.target.value.toLowerCase()) {
//restore full old data
this.setState({
data: this.preSearch
})
return
}
else {
var idx = e.target.dataset.idx
var searchdata = this.preSearch.filter(row => {
return row[idx].toString().toLowerCase().indexOf(e.target.value.toLowerCase()) > -1
})
this.setState({
data: searchdata,
})
}
}
预期结果: 过滤器重叠(累积),当前最新的过滤器优先 从过滤器输入中删除字符也会更新结果并瞄准要显示的 0 个过滤器和原始数据(如果用户自然删除了所有过滤器)
【问题讨论】:
标签: javascript arrays reactjs filter