I am struggling to figure out how to make this work. I thought if I sent an array as an argument to another function I'd be able to clear it but every time I do I get errors from the function it was sent to. I am trying to filter two 2D arrays filled with coordinates {x:, y:}. Everything works well except I can't clear val
after each time I pass it to my check()
function. If I do attempt to clear it i get errors from within my check()
function.
I wouldn't expect it to as I thought once it was sent as an argument it wouldn't matter any more. I've also tried creating a copy in multiple ways but no matter what, by splicing val
or doing val = 0
, the check function, specifically when calling length(validate[0])
it throws an error.
I've been at it to long now. Any help is appreciated.
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)
CodePudding user response:
To create a referenceless copy use this 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;
}
In case you are wondering: the reference is only lost when copying primitive datatypes, thus you need to go through an objects layers and copy it from the base layer.