在 React JS 中移除数组的所有元素
Remove all the elements of the array in React JS
我编写了一个由下拉列表的 onChange 事件触发的函数。
一旦函数被触发,它会根据参数值从 rest API 加载数据。但是,我用来存储这些数据的数组在随后的下拉更改事件中没有被清除。因此,当用户多次更改下拉列表时,数组会随着之前加载的数据而增长。
例如:
在第一个下拉列表中更改 => ['A','B','C']
第二次下拉更改 => ['A','B','C','E','F','G'] 而不是 ['E','F','G']
我的代码如下:
onDropdownChange = (e) => {
var newArray = [];
// To remove all the elements of newArray
newArray.forEach((e1,idx, arr) => {
newArray.splice(idx,1);
});
console.log(newArray);
const url = 'https://abcdefgh...../' + e + '/readings?today';
newArray = this.state.data.slice();
axios.get(url).then(res => {
var response_arr = res.data.items;
res.data.items.forEach((item, index) => {
newArray.push({ time: res.data.items[index].dateTime, TM: res.data.items[index].value })
})
let sortedArray = newArray.sort((a, b) => new Date(a.time).getTime() - new Date(b.time).getTime());
this.setState({ data: sortedArray });
this.fetchChart();
});
}
fetchChart = () => {
const { data } = this.state;
return <CustomLineChart data={data} />
}
render(){
const {items} = this.state;
var data = [];
const itemList = items.map(item => {
return <tr key={item.dateTime+''+item.value}>
<td style={{whiteSpace: 'nowrap'}}>{item.dateTime}</td>
<td>{item.measure}</td>
<td>{item.value}</td>
</tr>
});
return (
<div>
{this.fetchChart()}
<CustomDropdownList changeLink={this.onDropdownChange.bind(this)} />
</div>
);
}
}
export default Dashboard;
谁能帮我解决这个问题?
您正在使用
复制之前的数据
newArray = this.state.data.slice();
你不需要那个..事实上,如果你想创建一个带有新选项的新数组,你不需要这些。
您正在将结果添加到 newArray
,开始时您尝试清除的是空的,然后将其设置为添加了额外数据的现有数据。另外,避免使用 var.
var newArray = [];
// This is already empty
newArray.forEach((e1,idx, arr) => {
newArray.splice(idx,1);
});
// This will always be empty
console.log(newArray);
const url = 'https://abcdefgh...../' + e + '/readings?today';
// Existing data, remove this
newArray = this.state.data.slice();
axios.get(url).then(res => {
var response_arr = res.data.items;
res.data.items.forEach((item, index) => {
// This is where new data is being added to existing
newArray.push({ time: res.data.items[index].dateTime, TM: res.data.items[index].value })
})
我编写了一个由下拉列表的 onChange 事件触发的函数。 一旦函数被触发,它会根据参数值从 rest API 加载数据。但是,我用来存储这些数据的数组在随后的下拉更改事件中没有被清除。因此,当用户多次更改下拉列表时,数组会随着之前加载的数据而增长。
例如: 在第一个下拉列表中更改 => ['A','B','C'] 第二次下拉更改 => ['A','B','C','E','F','G'] 而不是 ['E','F','G']
我的代码如下:
onDropdownChange = (e) => {
var newArray = [];
// To remove all the elements of newArray
newArray.forEach((e1,idx, arr) => {
newArray.splice(idx,1);
});
console.log(newArray);
const url = 'https://abcdefgh...../' + e + '/readings?today';
newArray = this.state.data.slice();
axios.get(url).then(res => {
var response_arr = res.data.items;
res.data.items.forEach((item, index) => {
newArray.push({ time: res.data.items[index].dateTime, TM: res.data.items[index].value })
})
let sortedArray = newArray.sort((a, b) => new Date(a.time).getTime() - new Date(b.time).getTime());
this.setState({ data: sortedArray });
this.fetchChart();
});
}
fetchChart = () => {
const { data } = this.state;
return <CustomLineChart data={data} />
}
render(){
const {items} = this.state;
var data = [];
const itemList = items.map(item => {
return <tr key={item.dateTime+''+item.value}>
<td style={{whiteSpace: 'nowrap'}}>{item.dateTime}</td>
<td>{item.measure}</td>
<td>{item.value}</td>
</tr>
});
return (
<div>
{this.fetchChart()}
<CustomDropdownList changeLink={this.onDropdownChange.bind(this)} />
</div>
);
}
}
export default Dashboard;
谁能帮我解决这个问题?
您正在使用
复制之前的数据newArray = this.state.data.slice();
你不需要那个..事实上,如果你想创建一个带有新选项的新数组,你不需要这些。
您正在将结果添加到 newArray
,开始时您尝试清除的是空的,然后将其设置为添加了额外数据的现有数据。另外,避免使用 var.
var newArray = [];
// This is already empty
newArray.forEach((e1,idx, arr) => {
newArray.splice(idx,1);
});
// This will always be empty
console.log(newArray);
const url = 'https://abcdefgh...../' + e + '/readings?today';
// Existing data, remove this
newArray = this.state.data.slice();
axios.get(url).then(res => {
var response_arr = res.data.items;
res.data.items.forEach((item, index) => {
// This is where new data is being added to existing
newArray.push({ time: res.data.items[index].dateTime, TM: res.data.items[index].value })
})