【问题标题】:JavaScript - Making generic map/find/filter function [duplicate]JavaScript - 制作通用地图/查找/过滤功能[重复]
【发布时间】:2020-12-04 14:37:39
【问题描述】:

TLDR; 您将如何制作一个功能,例如搜索价值,例如在数组中,但是搜索的属性在哪里可以改变?

示例。

    const search = (arr, text) =>
    {
        // What if rather than e.name we wanted to search on e.phone?
        // And how could this be passed with the function params?
        return arr.find(e => e.name === text)
    }

【问题讨论】:

  • 您可以使用括号表示法来访问任何属性。见这里:Dynamically access object property using variable
  • 哦,哇,我什至不知道那是一回事。非常感谢人:)
  • 添加另一个参数(arr, prop, text)并使用e[prop] === text

标签: javascript arrays


【解决方案1】:

您可以使用Array#reduce 查找嵌套属性(作为字符串传入)与文本进行比较。

const search = (arr, prop, text) =>{
  const getProp = obj => prop.split('.').reduce((acc,curr)=>acc?.[curr], obj);
  return arr.find(e => getProp(e) === text);
}
console.log(search([{a: 1}, {a: {b: 'test'}}], 'a.b', 'test'));
console.log(search([{name: 'Joe'}, {name: 'John'}, {name: 'Bob'}], 'name', 'Bob'));

【讨论】:

  • 我认为 OP 正在寻找一种方法来制作与对象中仅一个键无关的过滤功能
  • @Rajesh 他们不是在寻找搜索动态属性的方法吗?
  • @Rajesh - 我是的,OrAssayag 发布了解决方案。
  • 我支持这个答案。简单而简短。
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 2014-09-05
  • 1970-01-01
  • 2012-11-14
  • 2019-06-12
  • 1970-01-01
  • 2014-04-02
  • 2020-11-24
相关资源
最近更新 更多