我使用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是一个奖励。 谢谢
答案 0 :(得分: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>
&#13;
答案 1 :(得分:0)
let filteredList = [];
_.forEach(responseList, function(value) {
var titleToSearch = value.title.split(" ");
if(titleToSearch [0]=="The")
filteredList.push(value);
});
请尝试这个逻辑,但尚未测试
答案 2 :(得分: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 #transition
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/lodash@4.17.4"></script>