繁体   English   中英

作为参数发送到另一个 function 后清除数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM