如何将两个对象数组与 reactjs 合并?
How to merge two array of objects with reactjs?
我有一个react-big-calendar,我想从后台获取这周的事件,从本地存储获取其他周的事件。
我的代码是:
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents : evts
})
})
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j <cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState( {
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
}
events
是 evt1
(来自后端的事件)和 evt2
(来自本地存储的事件)的合并数组,当我 运行 它时,我进入我的控制台:
evt1 是:
evt2 是:
但是,在我的日历上,只显示了 evt2 而不是所有事件(evt1 和 evt2)。
如何显示我日历上的所有事件?
尝试使用 concat
方法也许可行。
this.setState({
events: evt1.concat(evt2)
})
因为您正在对您的服务器进行 HTTP 调用,所以需要一些时间来获取数据。您应该等待 HTTP 调用的响应,而不是直接设置事件状态。你的代码应该是这样的:
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents: evts
})
})
.then(() => {
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j < cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState({
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
});
}
我还建议你在你的 promise 链中有一个 catch 块来处理错误。
您可以使用扩展运算符合并两个数组。
var a = [{fname : 'foo'}]
var b = [{lname : 'bar'}]
var c = [...a, ...b] // output is [{fname : 'foo'},{lname : 'bar'}]
在 evts 上添加 state.evt1
,然后遍历从 fetch 中获取的数据,对 for 循环内的当前元素进行更改,将元素推送到 evts,然后将该 evts 添加到 state
let evts = this.state.evt1;
for (let i = 0; i < data.length; i++) {
data[i].start = moment(data[i].start).toDate();
data[i].end = moment(data[i].end).toDate();
evts.push(data[i])
}
this.setState({
evt1: evts
})
我有一个react-big-calendar,我想从后台获取这周的事件,从本地存储获取其他周的事件。
我的代码是:
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents : evts
})
})
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j <cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState( {
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
}
events
是 evt1
(来自后端的事件)和 evt2
(来自本地存储的事件)的合并数组,当我 运行 它时,我进入我的控制台:
evt1 是:
evt2 是:
但是,在我的日历上,只显示了 evt2 而不是所有事件(evt1 和 evt2)。
如何显示我日历上的所有事件?
尝试使用 concat
方法也许可行。
this.setState({
events: evt1.concat(evt2)
})
因为您正在对您的服务器进行 HTTP 调用,所以需要一些时间来获取数据。您应该等待 HTTP 调用的响应,而不是直接设置事件状态。你的代码应该是这样的:
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents: evts
})
})
.then(() => {
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j < cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState({
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
});
}
我还建议你在你的 promise 链中有一个 catch 块来处理错误。
您可以使用扩展运算符合并两个数组。
var a = [{fname : 'foo'}]
var b = [{lname : 'bar'}]
var c = [...a, ...b] // output is [{fname : 'foo'},{lname : 'bar'}]
在 evts 上添加 state.evt1
,然后遍历从 fetch 中获取的数据,对 for 循环内的当前元素进行更改,将元素推送到 evts,然后将该 evts 添加到 state
let evts = this.state.evt1;
for (let i = 0; i < data.length; i++) {
data[i].start = moment(data[i].start).toDate();
data[i].end = moment(data[i].end).toDate();
evts.push(data[i])
}
this.setState({
evt1: evts
})