过滤对象列表

时间:2017-06-22 06:32:15

标签: ecmascript-6 lodash

我使用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是一个奖励。 谢谢

3 个答案:

答案 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;
&#13;
&#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>