Javascript 反应:调用Object.keys上的筛选器

Javascript 反应:调用Object.keys上的筛选器,javascript,reactjs,filter,Javascript,Reactjs,Filter,向React组件传递状态属性,该属性是对象的对象: { things: { 1: { name: 'fridge', attributes: [] }, 2: { name: 'ashtray', attributes: [] } } } 它还被传递(作为路由器参数)一个名称。我希望组件通过比较name值,在things

向React组件传递状态属性,该属性是对象的对象:

{
    things: {
        1: {
            name: 'fridge',
            attributes: []
        },
        2: {
            name: 'ashtray',
            attributes: []
        }
    }
}
它还被传递(作为路由器参数)一个
名称
。我希望组件通过比较
name
值,在
things
对象中找到匹配的对象

为此,我使用
过滤器
方法:

Object.keys(this.props.things).filter((id) => {
    if (this.props.things[id].name === this.props.match.params.name) console.log('found!');
    return (this.props.things[id].name === this.props.match.params.name);
});

但是,这将返回未定义的
。我知道这种情况之所以有效,是因为我的测试行(console.log
行)将
found
记录到控制台。为什么
filter
方法返回
undefined

您需要将筛选结果分配给一个对象,并将结果作为
[id]
获得。然后需要将对象作为
this.props.things[id]

var数据={
事情:{
1: {
名称:'冰箱',
属性:[]
},
2: {
名称:“烟灰缸”,
属性:[]
}
}
}
变量名称='冰箱';
var newD=Object.keys(data.things).filter((id)=>{
if(data.things[id].name==name)console.log('found!');
返回(data.things[id].name==name);
});

console.log(data.things[newD])
对象。keys
返回一个键数组(在您的例子中可能是
[“2”]
)。 如果您对检索匹配对象感兴趣,那么您确实需要
object.values
。如果您期望的是一个结果,而不是它们的数组,则使用
find
而不是
filter

Object.values(this.props.things).find((obj) => {
    if (obj.name === this.props.match.params.name) console.log('found!');
    return (obj.name === this.props.match.params.name);
});
如果在函数中使用该结果,请确保
返回该结果。以下是基于您在评论中提供的小提琴的片段:

var状态={
事情:{
1: {
名称:'冰箱',
属性:[]
},
2: {
名称:“烟灰缸”,
属性:[]
}
}
};
var findThing=函数(名称){
返回Object.values(state.things).find((obj)=>{
if(obj.name==name)console.log('found!');
返回obj.name==name;
});
}
var结果=查找内容(“冰箱”);

控制台日志(结果)你能展示你在哪里使用这个片段的全部代码吗?谢谢-这看起来确实是一个更好的方法。但是我仍然看不出我的代码有什么问题?也许你用结果中不存在的属性引用来处理结果。或者,您多次调用此代码,有时只会得到
console.log
输出。没有更多的上下文就说不出来。你能提供一个小提琴来演示这个问题吗?显然,一个不返回
的函数将返回
未定义的
。确实,谢谢你的帮助。如果你想把它写进你的答案中,我会记对的。