javascript - 我们可以在任何地方使用 `const` 而不是 `let` 吗?

标签 javascript arrays ecmascript-6 immutability flowtype

对于flowtype,我们更喜欢const而不是let

我有需要以最高效的方式工作的函数,它对我来说效果很好,它比较两个数组,所以这是我的问题的一个很酷的例子:

/**
* @function compare
* @description function compares two arrays with ids to figure out: are they equal? (elements position can be different)
* @param arraFrom {Array}
* @param arraTo {Array}
* @param compareFunction {Function}
* @returns {Boolean}
*/
function compare(arraFrom, arraTo, compareFunction) {
  let notEqual = true;
  if(arraFrom.length !== arraTo.length) return false;
    for (let i = 0; i < arraFrom.length; i++) {
      notEqual = true;
      for (let j = 0; j < arraTo.length; j++) {
        if (compareFunction ?
            compareFunction(arraFrom[i], arraTo[j]) :
          arraFrom[i] === arraTo[j]) {
          notEqual = false;
          break;
        }
      }
      if (notEqual) return false;
   }
   return true;
}

问题是:在不使用 let 的情况下,我们如何以最高效的方式实现它?

谢谢!

最佳答案

您可以使用 for...of 循环,而不是通过改变索引变量来迭代数组:

function compare(arraFrom, arraTo, compareFunction) {
  let notEqual = true;
  if(arraFrom.length !== arraTo.length) return false;
  for (const a of arraFrom) {
    notEqual = true;
    for (const b of arraTo) {
      if (compareFunction ? compareFunction(a,b) : a === b) {
        notEqual = false;
        break;
      }
    }
    if (notEqual) return false;
  }
  return true;
}

您可以简单地提前返回,而不是使用可变的 notEqual 标志:

function compare(arraFrom, arraTo, compareFunction) {
  if (arraFrom.length !== arraTo.length) return false;
  outer: for (const a of arraFrom) {
    for (const b of arraTo) {
      if (compareFunction ? compareFunction(a,b) : a === b) {
        continue outer;
      }
    }
    return false;
  }
  return true;
}

但这非常难以理解。我建议使用以下内容:

function compare(arrayFrom, arrayTo, compareFunction) {
  if (arrayFrom.length !== arrayTo.length) return false;
  const test = typeof compareFunction == "function"
    ? a => b => compareFunction(a, b)
    : a => b => a === b;
  return arrayFrom.every(a => arrayTo.some(test(a)));
}

关于javascript - 我们可以在任何地方使用 `const` 而不是 `let` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108550/

相关文章:

Javascript 从和对象中找到具有最小(或最大)值的 n 个键

javascript - HTML 表格不会删除填充

javascript - 为什么我的循环在迭代之间不等待?设置超时()

java - 从二维数组中收集数字

java - 在 Java 中播放/流式传输视频,而不将文件存储在磁盘上

javascript - 为什么使用模板字符串时可以不用括号调用函数?

自动使用页面上所有大图像的 Javascript Gallery

javascript - 获取网页上使用 TAB 按钮选择的项目的标题

Javascript 检查多维数组是否存在键

javascript - 如何调试用 es6/es7 编写的 node.js 后端?