【问题标题】:Retrieve all objects filtered by indicated key's value [duplicate]检索由指定键的值过滤的所有对象[重复]
【发布时间】:2020-03-04 14:59:47
【问题描述】:

我在尝试获得准确的输出时遇到了一点问题。

const data = [{
    name: 'Alex Young',
    country: 'SE',
    nID: 424
    address: 'some address 12'
},{
    name: 'Martha Lewis',
    country: 'PT',
    nID: 312,
    address: 'an address 49'
},{
    name: 'Sophie Jones',
    country: 'NL',
    nID: 36,
    address: 'other address 3129'
}];

const filter = '12';

const keysToEvaluate = ['name', 'country', 'address'];

对于给定的 data,我想只评估给定的 keysToEvaluate 并输出值包含 filter 的所有对象。

预期输出:

[{
    name: 'Alex Young',
    country: 'SE',
    nID: 424
    address: 'some address 12'
},{
    name: 'Sophie Jones',
    country: 'NL',
    nID: 36,
    address: 'other address 3129'
}]

TIA

【问题讨论】:

  • 参见here 了解按对象属性过滤数组,参见here 了解使用变量访问对象属性。
  • 基本上:const result = array.filter(entry => keysToEvaluate.some(key => entry[key].includes(filter))); 我假设 any 匹配意味着应该包含该对象。如果 所有 属性都应与要保留的对象匹配,请将 some 更改为 every

标签: javascript json filter lodash


【解决方案1】:

const data = [{name: 'Alex Young',country: 'SE',nID: 424,address: 'some address 12'},{name: 'Martha Lewis',country: 'PT',nID: 312,address: 'an address 49'},{name: 'Sophie Jones',country: 'NL',nID: 36,address: 'other address 3129'}];

    const filter = '12';

    const keysToEvaluate = ['name', 'country', 'address'];

    const filtered = data.filter(t => keysToEvaluate.some(k => String(t[k]).includes(filter)));
    console.log(filtered);

【讨论】:

  • 对其进行了调整,使其不区分大小写:const filtered = data.filter(t => keysToEvaluate.some(k => String(t[k].toLowerCase()).includes(filter.toLowerCase())));
猜你喜欢
  • 2023-04-04
  • 2022-10-14
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多