代码之家  ›  专栏  ›  技术社区  ›  codproe

在JavaScript中对二维数组进行排序

  •  1
  • codproe  · 技术社区  · 2 年前

    我需要在JavaScript中对2D数组进行排序。

    const a = [
      [1, 1],
      [1, 2],
      [1, 3],
      [5, 6]
    ]
    const b = [
      [5, 6],
      [1, 2],
      [1, 3],
      [1, 1]
    ]
    b.sort((c, d) => d[0] + d[1] - c[0] + c[1]);
    console.log(b)
    
    function compare(a, b) {
      if (a.length != b.length) return false;
      for (let i = 0; i < b.length; i++)
        for (let j = 0; j < b[i].length; j++)
          if (a[i][j] !== b[i][j]) return false;
      return true;
    }
    console.log(compare(a, b))

    我想把数组b排序为等于数组a。当然,现实生活中的数组要长得多。这只是一个例子。

    我已经编写了用于比较的函数,但排序函数不能正常工作。你能帮我修一下吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Michael M.    2 年前

    第一 d[0] + d[1] - c[0] + c[1] 是向后的。你应该减去的元素 d 从…起 c ,而不是相反。这样地: c[0] + c[1] - d[0] + d[1] .

    其次,您有一个操作顺序错误。你需要减去的元素 d 从…起 c ,但您当前的代码减去的一个元素 d 并添加另一个。你需要分配负号,就像这样: c[0] + c[1] - d[0] - d[1]

    const a = [
      [1, 1],
      [1, 2],
      [1, 3],
      [5, 6]
    ]
    const b = [
      [5, 6],
      [1, 2],
      [1, 3],
      [1, 1]
    ]
    b.sort((c, d) => c[0] + c[1] - d[0] - d[1]);
    console.log(b)
    
    function compare(a, b) {
      if (a.length != b.length) return false;
      for (let i = 0; i < b.length; i++)
        for (let j = 0; j < b[i].length; j++)
          if (a[i][j] !== b[i][j]) return false;
      return true;
    }
    console.log(compare(a, b))