2017-06-22 135 views
0

我使用Redux呈現了一個列表,並且有一個搜索字段來查找包含搜索關鍵字的影片。我的列表是一個不是數組的對象,如果用戶鍵入:「The」,它應該過濾標題中有'The'的列表。過濾對象列表

{'1': { 'title': 'A Name' },'2': { 'title': 'The Name' },'3': { 'title': 'The Second Name' }} 

所以過濾後的結果應該是

{'2': { 'title': 'The Name' },'3': { 'title': 'The Second Name' }} 

你會怎麼做呢?使用lodash是一項獎勵。 感謝

+1

在你的問題中的對象是無效的。你能確保你給出了正確的對象嗎? –

回答

1

您礁使用_.pickBy()爲對象的過濾器,檢查還沒有測試過,如果每個子對象標題_.includes()搜索詞:

const data = {'1': { 'title': 'A Name' }, '2': { 'title': 'The Name' }, '3': { 'title': 'The Second Name' }}; 
 

 
const result = _.pickBy(data, (v) => _.includes(v.title, 'The')); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

0
let filteredList = []; 
    _.forEach(responseList, function(value) { 
     var titleToSearch = value.title.split(" "); 
     if(titleToSearch [0]=="The") 
      filteredList.push(value); 
    }); 

請試試這個邏輯,儘管

0

你需要迭代你的對象鍵,過濾並將結果減少回到對象。

const obj = {'1': { 'title': 'A Name' },'2': { 'title': 'The Name' },'3': { 'title': 'The Second Name' }} 
 

 
console.log(
 
    Object.keys(obj) 
 
    .filter(key => obj[key].title.includes('The')) 
 
    .reduce((acc, key) => (acc[key] = obj[key], acc), {}) 
 
)

或者使用lodash#變換

const obj = {'1': { 'title': 'A Name' },'2': { 'title': 'The Name' },'3': { 'title': 'The Second Name' }} 
 

 
console.log(
 
    _.transform(obj, (result, value, key) => { 
 
    if(value.title.includes('The')) result[key] = value 
 
    }, {}) 
 
)
<script src="https://unpkg.com/[email protected]"></script>