2017-06-16 78 views
0

我正在嘗試使搜索字符串識別搜索中的字符。從輸入創建排除過濾器

如果文本包含-,我想將其用作exclude

只有在-字符有space before itposition 0時才應排除。

搜索foo -bar它應該只在foo存在但bar沒有。

我所建立的CodeSandbox樣本:https://codesandbox.io/s/ZvAqXoOQ

代碼應該像這樣工作,但我們也承認,當應用every(e => !title

FOO
.filter(movie => { 
    const title = movie.title.toLowerCase(); 
    return search.every(e => title.includes(e.toLowerCase())); 

欄基於術語的第一個字母

.filter(movie => { 
    const title = movie.title.toLowerCase(); 
    return search.every(e => !title.includes(e.toLowerCase())); 
}); 

回答

1

皮克條件。像這樣的東西。

const movies = ['foo', 'foo bar', 'baz', 'qux', 'foo baz'].map(title => ({title})) 
 

 
const search = 'foo -bar'.split(' ') 
 

 

 
console.log(
 
    movies.filter(
 
     ({title}) => search.every(term => term[0] === '-' ? !title.includes(term.substring(1)) : title.includes(term)) 
 
    ) 
 
)

const movies = ['foo', 'foo bar', 'baz', 'qux', 'foo baz'].map(title => ({title})) 
 

 
const search = 'foo -'.split(' ') 
 

 

 
console.log(
 
    movies.filter(
 
     ({title}) => search.every(term => { 
 
     if(term === '-') return true 
 
     
 
     if(term[0] === '-') return !title.includes(term.substring(1)) 
 
     
 
     return title.includes(term) 
 
     
 
     }) 
 
    ) 
 
)

+0

一個小問題,但─如果只是' - '(與之前的空間和無文本之後目前,打字的時候將顯示不出結果直到在' - '之後鍵入東西。示例https://codesandbox.io/s/ZvAqXoOQ – Ycon

+0

@Ycon這個想法是一樣的:根據您的需求分析術語,然後使用if-else語句來選擇根據你的分析,你需要的條件。所以你檢查'如果(term ===' - ')返回true'比'if(term [0] ===' - ')return!title.includes'等 –

+0

好。最後,我試圖將您的示例應用於嵌套在「電影」中的一些數據。但是,無法應用過濾器。它在這裏(第12行)https://codesandbox.io/s/ZvAqXoOQ。我的嘗試是'if(x [0] ==='#')返回genres.includes(f => genres.includes(x.toLowerCase())' – Ycon