我正在使用本机开发一个应用程序。我在状态中有一个对象数组(lettersPosition),我想在函数中的变量中对它进行临时排序(但我不希望对状态本身进行排序):
verifyWord = () => {
const array = this.state.lettersPosition;
array.sort(function (a, b) {
return a.x - b.x;
});
var word = "";
array.map(function (char) {
word += char.letter
})
}
我对其进行了测试,似乎我的状态本身在排序后已更新(即使我在temp数组上调用了sort函数)。
就像'array'变量包含对状态的整个引用,而不仅仅是其值一样。如果我修改该变量,它也会修改状态。
反应正常吗?
如何仅获取状态值并操纵状态值而不更改状态本身?
谢谢
答案 0 :(得分:0)
尝试使用var newArray = oldArray.slice();
而不是const array = this.state.lettersPosition;
在您的代码中,您没有创建数组的副本,只是将其分配给另一个变量。
有关var newArray = oldArray.slice();
的更多信息,请参见Copy array by value。
答案 1 :(得分:0)
使用Array.from()。它会创建一个浅表副本。
const sortedArray = Array.from(this.state.lettersPosition);
...etc
答案 2 :(得分:0)
您也可以使用扩展运算符。
var a = [1, 2, 3, 4, 5]
var b = [...a]