【问题标题】:Map through array of objects and filter out array by property映射对象数组并按属性过滤数组
【发布时间】:2019-06-02 21:12:03
【问题描述】:
我有一个问题,过滤具有对象数组的对象的最佳方法是什么,我想返回一个具有匹配属性的对象
const test = Object.keys(repo).map((keyName, i) => {
if(repo[keyName].name === post_name) {
console.log(repo[keyName])
}
})
上面的代码有效,但我觉得它不是实现它的最佳方法,也许有人有更好的方法来解决这个问题。
【问题讨论】:
标签:
javascript
reactjs
object
【解决方案1】:
如果要过滤现有数组并创建新数组,则应使用.filter。仅当您从现有数组中的每个元素创建另一个数组时才使用 .map - 不要将其用于副作用。
您可以使用Object.values 而不是Object.keys,因为看起来您只关心值:
const test = Object.values(repo).filter(({ name }) => name === post_name);
然后,您将拥有一个具有匹配 name 的对象数组。
如果您知道只有一个匹配对象,请改用.find:
const match = Object.values(repo).find(({ name }) => name === post_name);