gpt4 book ai didi

javascript - 函数更改输入数组的数据

转载 作者:行者123 更新时间:2023-11-28 12:52:01 25 4
gpt4 key购买 nike

我正在 React 中制作一个测验应用程序。除了一个对我的数组进行洗牌的函数之外,一切都运行良好,因此每次答案看起来都是随机的。这是代码。

  shuffleArray() {
let array = this.state.answerArray;
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}

获取和存储工作正常,但每当我调用该 shuffleArray 函数时,我的原始数组 (answerArray) 也会像 shuffledArray 一样进行洗牌。

我在获取数据后调用 setState 函数

this.setState(
{
qid: _id,
question: question,
correct_answer: correct_answer,
answerArray: [
correct_answer,
answer1 || " ",
answer2 || " ",
answer3 || " "
]
},
() => {
this.setState({
shuffledArray: this.shuffleArray()
});
}
);

知道为什么两个数组都会打乱吗?

最佳答案

让我们看看shuffleArray:

 shuffleArray() {
let array = this.state.answerArray;
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}

这行在这里:

 let array = this.state.answerArray;

它不会将 this.state.answerArray 的值复制到 array 中。 arraythis.state.answerArray,因此通过修改 array,您就可以修改 this.state.answerArray

您可以使用spread syntax复制您的数组:

let array = [...this.state.answerArray];

但是为什么呢?你可能会问。

嗯,数组是 mutable (对象和函数也是如此),因此赋值是通过引用进行的,而不是复制。

如果我有一个对象数组该怎么办?

Check Josh answer below !

关于javascript - 函数更改输入数组的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com