【问题标题】:Sort 2D array of pairs in JavaScript在 JavaScript 中对二维数组进行排序
【发布时间】:2023-01-11 10:35:52
【问题描述】:

我需要在 JavaScript 中对二维数组进行排序。

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。当然,现实生活中的数组要长得多。这只是一个例子。

我已经编写了用于比较的函数,但是排序函数无法正常工作。你能帮我解决这个问题吗?

【问题讨论】:

    标签: javascript arrays multidimensional-array


    【解决方案1】:

    问题不是您的比较功能,而是您的.sort() 调用。

    首先,d[0] + d[1] - c[0] + c[1] 倒退了。您应该从c 中减去d 的元素,而不是相反。像这样:c[0] + c[1] - d[0] + d[1]

    其次,您的操作顺序有误。您需要从c 中减去d 的元素,但是您当前的代码减去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))

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2018-06-21
      • 2013-08-17
      • 2017-05-25
      • 2015-09-17
      • 2021-07-14
      相关资源
      最近更新 更多