Javascript 使用Array.splice可从两个数组中删除字符串
这就是我要处理的: 在js文件的顶部,我声明了以下变量:Javascript 使用Array.splice可从两个数组中删除字符串,javascript,arrays,json,Javascript,Arrays,Json,这就是我要处理的: 在js文件的顶部,我声明了以下变量: let teensArray = []; let copyteensArray = []; let teensArrayLength = 0; let teensArrayPlayed = 0; $.getJSON("json/teens.json", function(data) { teensArray = data.statements; copyteensArray = dat
let teensArray = [];
let copyteensArray = [];
let teensArrayLength = 0;
let teensArrayPlayed = 0;
$.getJSON("json/teens.json", function(data) {
teensArray = data.statements;
copyteensArray = data.statements;
teensArrayLength = data.statements.length;
$(".teens .total-cards").text(teensArrayLength + " CARDS")
});
每次模式为“青少年”时,执行以下操作:
if (mode == "teens") {
let currStatement = copyteensArray[getRandomInt(copyteensArray.length)]
let index = copyteensArray.indexOf(currStatement)
copyteensArray.splice(index, 1);
currentPack = "TEENS PACK";
currentColor = "#23B574";
srcImg = "svg/007-party hat.svg"
playedCardsText = ++teensArrayPlayed + " / " + teensArrayLength;
console.log(copyteensArray.length);
console.log(teensArray.length);
return currStatement;
}
问题在于:在if语句之后,teensArray的值与copyteensArray的值相同
示例值:
在if语句之前teensArray[“1”、“2”、“3”、“4”]
复制阵列[“1”、“2”、“3”、“4”] 内部if语句
复制阵列拼接(索引1) 在if语句内部返回后
teensArray[“1”、“3”、“4”]
复制阵列[“1”、“3”、“4”] 仅当用户决定返回到另一屏幕时,此函数才会执行:
function reset() {
copyteensArray = teensArray;
teensArrayPlayed = 0;
}
我遗漏了什么吗?
copyteensArray=teensArray代码>使相同的指针指向它们。考虑使用<代码> CopeTeNeStase=…code>将teensArray
内容的全新实例分配给copyteensArray
您拥有数组的“浅”副本,即两个数组指向相同的对象。对浅层副本所做的任何更改都将更改原始对象
您可以在Windows中将其可视化为快捷方式。对快捷方式所做的任何更改也会更改原始对象
解决这个问题,制作一份硬拷贝。ES6中有多种方法可以做到这一点
hardCopy = [...OriginalArray];
另一种方法是对对象进行JSON.stringify()处理并将其解析回来
hardCopy = JSON.parse(JSON.stringify(OriginalArray));
对于您的代码,请通过更改这些行来修复此问题
$.getJSON("json/teens.json", function(data) {
teensArray = [...data.statements];
copyteensArray = [...data.statements];
我怀疑copyTeensArray和teensArray都指向同一个对象,这是由于代码未包含在snippet@TedBrownlow我添加了一个片段,请检查它,但我怀疑它是否是?“splice()
方法通过删除或替换现有元素和/或在适当位置添加新元素来更改数组的内容”要复制teensArray
请在copyteensArray=teensArray之前使用teensArray.slice()
代码>仅指向copyteensArray
到teensArray
。您需要切片或展开:copyteensArray=teensArray.slice()代码>或copyteensArray=[…teensArray]
返回一个新数组。但是请记住,虽然这将复制基本元素,但它将返回对任何嵌套对象的引用。你的解决方案似乎不起作用。