Javascript 应对变量变化,但不应';T
我有一个问题大约3个小时,我不明白为什么 下面的代码应该可以解释我的问题:Javascript 应对变量变化,但不应';T,javascript,json,reactjs,react-hooks,Javascript,Json,Reactjs,React Hooks,我有一个问题大约3个小时,我不明白为什么 下面的代码应该可以解释我的问题: import {useEffect} from 'react' function shuffle(tab) { console.table(tab) //shows initialdata var i, j, tmp; for (i = tab.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1));
import {useEffect} from 'react'
function shuffle(tab) {
console.table(tab) //shows initialdata
var i, j, tmp;
for (i = tab.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
}
return tab;
}
function App() {
useEffect(() => {
const initaldata = [{a:1}, {a:2}, {a:3}, {a:5}]
console.table(initaldata) //shows initialdata
const finaldata = initaldata
console.table(shuffle(finaldata)) //shows initialdata shuffled
console.table(initaldata) //shows initialdata shuffled, why ?
}, [])
return null;
}
我在一个函数中尝试了多种解决方案,比如孤立的“shuffle(initialdata)”
事实上,shuffle函数updateall my变量使我的所有代码都无法正常工作
谢谢你,我希望你能找到解决办法。
(如果有一些错误,我很抱歉,我是法国人)JavaScript通过引用传递对象,这就是原因。如果要避免这种情况,请使用贴图更改for循环
....
const toReturn = tab.map(item =>{
...
});
return toReturn
在运行shuffle=>
const finalData = JSON.parse(JSON.stringify(initialData));
console.table(initialData);
希望这能有所帮助
Javascript通过引用传递对象,包括数组。这意味着当你
const finaldata = initaldata
finaldata和initaldata仍然指向内存中的同一数组。如果您不想修改原始数据,则需要在修改数组之前对数组进行浅拷贝或深拷贝。
shuffle
对原始数组进行变异。通过引用调用,在shuffle函数中深度克隆args,tab=tab.slice()
这是低效的。不过,不需要深度克隆,array.slice()
应该可以做到这一点。这没有多大帮助,因为洗牌算法会改变。费舍尔·耶茨的重点是在原地踏步。