[英]Clearing an array after sending to another function as an argument
我正在努力弄清楚如何使这项工作。 我想如果我将一个数组作为参数发送给另一个 function,我就可以清除它,但每次我这样做时,我都会从它被发送到的 function 中收到错误。 我正在尝试过滤两个填充坐标 {x:, y:} 的 2D arrays。 一切正常,除了每次我将它传递给我的check()
function 后我都无法清除val
。 如果我确实尝试清除它,我会从我的check()
function 中得到错误。
我不希望它像我想的那样,一旦它作为论据被发送,它就不再重要了。 我也尝试过以多种方式创建副本,但无论如何,通过拼接val
或执行val = 0
检查 function,特别是在调用length(validate[0])
时会引发错误。
我已经做了很久了。 任何帮助表示赞赏。
let val = [];
let hLines = []
function compare() {
for (let i = 0; i < 8; i++) {
//val = []
for (let j = 0; j < sortY[i].length; j++) {
for (let k = 0; k < sortX.length; k++) {
for (let l = 0; l < sortX[k].length; l++) {
if (sortY[i][j] == sortX[k][l] && !val.includes(sortX[k])) {
val.push(sortX[k])
}
}
}
if (j === sortY[i].length - 1) {
//let copy = val.slice()
//check(sortY[i], copy)
check(sortY[i], val)
//val = []
}
}
}
}
compare()
function check(hLine, validate) {
for (let i = 0; i < validate.length; i++) {
for (let j = 0; j < validate[i].length; j++) {
let first = validate[i][0];
let last = validate[i][validate[i].length - 1];
if (validate[i][j] != first && validate[i][j] != last) {
validate[i].splice(j, 1)
j--
}
}
}
let lengthValue = length(validate[0])
let lengthCheck = validate.every((v, i) => {
return length(v) === lengthValue
})
if (!lengthCheck) {
hLines.push(hLine)
}
}
console.log(hLines)
要创建无参考副本,请使用此 function:
function copy(aObject) { // Deep Clone Object from https://stackoverflow.com/a/34624648/16642626
if (!aObject) {
return aObject;
}
let v;
let bObject = Array.isArray(aObject) ? [] : {};
for (const k in aObject) {
v = aObject[k];
bObject[k] = (typeof v === "object") ? copy(v) : v;
}
return bObject;
}
如果您想知道:引用仅在复制原始数据类型时丢失,因此您需要通过对象层 go 并从基础层复制它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.