【发布时间】:2020-12-29 19:20:54
【问题描述】:
所以我在 React.js 工作。我需要生成同一个列表的三个版本,但三个事件中的每一个都包含一组不同的市场。 我希望事件是相同的。但是,当它们与市场相关联时,这三个相同事件中的每一个都可能具有基于申报者的不同市场子集。
organiseEvents(timeFilter) {
const propevents = this.props.Properties.events;
const propmarkets = this.props.Properties.markets;
const propselections = this.props.Properties.selections;
let events = new Array();
propevents.forEach(e => {
e.Markets = propmarkets.filter(m => m.Values.eventid === e.Id && m.Values.name.toUpperCase().includes(timeFilter));
e.Markets.forEach(m => {
m.Selections = propselections.filter(s => s.Values.marketid === m.Id);
});
events.push(e);
});
if(events.length > 0) {
events = events.sort(function (a, b) { return a.Values.homerotation - b.Values.homerotation });
return events;
} else{
return [];
}
}
render() {
let events = this.organiseEvents("");
let midevents = this.organiseEvents("MIDEVENT");
let postevents = this.organiseEvents("POSTEVENT");
}
我遇到的问题是:
- this.organiseEvents("") 运行:事件包含两个“事件”对象,每个对象包含三个市场。
- this.organiseEvents("MIDEVENT") 运行:midevents 包含相同的两个“事件”对象,但没有市场,因为没有市场与过滤器匹配。
- events 也成为 this.organiseEvents("MIDEVENT") 的结果。
- events 和 midevents 将成为 this.organiseEvents("POSTEVENT") 的结果
某处有一个参考问题,我终生无法发现它。我觉得我错过了显而易见的事情。
每三个 let 变量应该是相同两个事件的三个完全独立的表示,但其中包含不同的市场。
我同时发现的一个修复方法如下:
let events = JSON.parse(JSON.stringify(this.organiseEvents("")));
let midevents = JSON.parse(JSON.stringify(this.organiseEvents("MIDEVENT")));
let postevents = JSON.parse(JSON.stringify(this.organiseEvents("POSTEVENT")));
这会强制三个值中的每一个不引用同一个地方。但是,在我看来,这是一个肮脏的解决方案,它可以方便地解决问题,而不是让我了解问题所在并正确解决问题。
谢谢。
【问题讨论】:
-
您的问题是由于
const propevents = this.props.Properties.events;和e.Markets = propmarkets.filter....;3 行中的引用问题。和m.Selections = propselections.filter....每次调用this.organizeEvents时,您从道具中引用相同的数组,即Properties.events。并且您使用e.Markets = propmarkets.filter....和m.Selections = propselections.filter...改变该数组。
标签: javascript reactjs function memory return