我目前正在尝试使用isMyOffer
prop返回一个Component。
return (
<div>
<ul>
{Object.keys(offers).map(key => (
<Offer
key={key}
index={key}
details={offers[key]}
account={this.props.account}
isMyOffer={this.props.checkIfMyOffer(key, this.props.account.myOffers)}
addToMyOffers={this.props.addToMyOffers}
/>
))}
</ul>
</div>
)
我的函数checkIfMyOffer()
应该在创建的第一个商品上返回true,而对其他商品返回false,但是对于所有商品都返回false。
checkIfMyOffer = (offerKey, myOffers) => {
if(myOffers){
Object.keys(myOffers).forEach(key => {
if(offerKey === myOffers[key]) {
console.log("return " + offerKey)
return true
}
})
}
return false
};
console.log
表示我正在进入条件循环但我的商品组件仍然具有 false 作为其isMyOffer值。
感谢您的帮助。
答案 0 :(得分:1)
if(myOffers) {
if(Object.values(myOffers).find(x => x === offerKey)) {
return true;
}
}
return false;
此方法使用Array.prototype.find()
来查看密钥是否在Object.values()
数组中。
或者可以使用.includes()
作为OP声明:
if(myOffers) {
if(Object.values(myOffers).includes(offerKey)) {
return true;
}
}
return false;
答案 1 :(得分:1)
您可以按如下方式更新checkIfMyOffer
:
checkIfMyOffer = (offerKey, myOffers) => {
return myOffers && Object.keys(myOffers).some(key => myOffers[key] === offerKey);
或者你没有事件需要它,只能更新你的React.Component:
<Offer
key={key}
index={key}
details={offers[key]}
account={this.props.account}
sMyOffer={myOffers && Object.keys(myOffers).some(offerKey => myOffers[offerKey] === key)}
addToMyOffers={this.props.addToMyOffers}
/>
答案 2 :(得分:0)
我在这里看到了几件事:
1-您的checkIfMyOffer
函数将始终返回false
因为您没有从if语句中返回任何内容。您只是使用forEach
2-我看到你试图在forEach上使用return。 ForEach不返回值,它只是遍历数组并在每个元素中执行任何操作。 See more here。
如果您想将新数组元素返回到新数组中,我建议您使用.map
。这将返回一个真或假的数组
3-您要返回.map
的结果,您需要实际返回整个操作。如果您只是将[{1}}替换为forEach
,那么它会一直持续到您在函数结束时遇到.map
为止。
在您的情况下,您希望在对象中包含某个元素时返回true,因此您的代码应如下所示:
return false
不确定这是否是您要找的。但希望它有所帮助。
编辑:很明显,阵列并不是您想要的。我不好误会!如果您只想知道checkIfMyOffer = (offerKey, myOffers) => {
if(myOffers){
return Object.keys(myOffers).map(key => {
if(offerKey === myOffers[key]) {
console.log("return " + offerKey)
return true
}
})
}
return false
};
是否在offerKey
,您可以使用myOffers
运算符(see more here)。基本上,如果在对象中找到键,则返回true,否则返回false。所以在这种情况下,我们想要更新in
,如下所示:
checkIfMyOffer