我试图修改一个复制的数组,而不改变原始数组。我尝试了使用slice()
方法,但它没有像预期的那样工作:
//toFill holds the values I want to add into an array named secondArr,
//replace every empty sting within secondArr with 0
var toFill = [0, 0, 0, 0];
var mainArr = [
[" ", 1, 1, 1],
[" ", 1, 1, 1],
[" ", 1, 1, 1],
[" ", 1, 1, 1]
];
var secondArr = mainArr.slice(0,4);
//this function returns a 1D array, stores the indices of all empty strings within an array
function findBlankSpaces(secondArr) {
var emptyIndices = [];
var innerArrLen = secondArr.length;
var outterArrLen = secondArr[0].length;
for (var i = 0; i < innerArrLen; i++) {
for (var j = 0; j < outterArrLen; j++) {
if (secondArr[i][j] == " ") {
emptyIndices.push([i, j]);
}
}
}
return emptyIndices;
}
//this function returns the modified array, with empty spaces replaced with 0s
function fillWithZero(secondArr, toFill) {
var emptyIndices = findBlankSpaces(secondArr);
for (var i = 0; i < emptyIndices.length; i++) {
secondArr[emptyIndices[i][0]][emptyIndices[i][1]] = toFill[i];
}
}
//consoles
console.log(fillWithZero(secondArr, toFill));
console.log(mainArr);
//expected output in console is [[" ", 1,1,1], [" ",1,1,1], [" ",1,1,1], [" ",1,1,1]];
//actual output is [[0,1,1,1], [0,1,1,1], [0,1,1,1], [0,1,1,1]];
//I didn't modify mainArr, but only modified secondArr, why that mainArr also affected?
我没有修改mainArr,只是使用slice()
创建了一个副本,但为什么当其副本发生变化时,它也会改变?
问题是:有没有办法阻止这种情况发生,或者如何调用不含任何0的mainArr,我希望mainArr保持不变。谢谢。
.slice()
: "slice() 方法返回一个新的数组对象,这个对象是从 begin 到 end(不包括 end)选择的数组的浅拷贝。原始数组将不会被修改。" 你需要指定索引 (arr.slice([begin[, end]])
)。 - Mukyuuvar secondArr = JSON.parse(JSON.stringify(mainArr));
- Ponleu