我正在努力弄清楚如何進行這項作業。我想如果我將一個陣列作為引數發送給另一個函式,我將能夠清除它,但每次我都會從它被發送到的函式中得到錯誤。我正在嘗試過濾填充坐標 {x:, y:} 的兩個二維陣列。一切正常,除了val每次我將它傳遞給我的check()函式后我都無法清除。如果我確實嘗試清除它,則會從我的check()函式中收到錯誤訊息。
我不會期望它像我認為的那樣,一旦它作為引數發送,它就不再重要了。我也嘗試過以多種方式創建副本,但無論如何,通過拼接val或執行val = 0,檢查函式,特別是在呼叫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)
uj5u.com熱心網友回復:
要創建無參考副本,請使用此函式:
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;
}
如果您想知道:參考僅在復制原始資料型別時丟失,因此您需要通過物件層并從基礎層復制它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375507.html
標籤:javascript 数组
