检查 JavaScript 中的数组是否已排序

7

我需要确定这种类型的数组是否已经排序:

var grilla = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

我知道如何显示所有元素并检查简单数组是否已排序,但不知道如何做到这一点。我的“解决方案”无法覆盖以下情况: [ [1, 2, 3], [4, 5, 6], [8, 7, 9] ] 在这种情况下,整个数组未排序是因为最后一个数组,但我不知道如何访问最后一个数组以检查它是否已排序。
function chequearSiGano() {
    for(var i=0;i<(grilla.length-1);i++) {
      if (grilla[i][grilla.length-1] > grilla[i+1][0]) {
        return false;
      }
      for(var j=0;j<(grilla.length-1);j++) {
        if (grilla[i][j] > grilla[i][j+1]) {
          return false;
        }
      }
    }
    return true;
}

那么,如果它们被展开,所有元素实际上都应该是按升序排列的吗?以下内容应返回 false:[[4,5,6],[1,2,3],[7,8,9]]? - Olimpiu POP
是的,只有当为true时返回:[[1,2,3],[4,5,6],[7,8,9]]。 - Guaro
那么你已经得到了你的回答 :) - Olimpiu POP
2个回答

1
为了简单起见,将数组压平。
然后您可以使用用于扁平数组的代码,或者甚至可以按照以下方式进行操作。

const checkIfSorted = array => {
  var flat = array.flat();
  var flatsorted = flat.slice().sort();
  return flat.toString() === flatsorted.toString();
}

var grill = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
console.log('grill sorted?', checkIfSorted(grill))
var grill2 = [
  [1, 2, 4],
  [3, 5, 6],
  [7, 8, 9]
];
console.log('grill2 sorted?', checkIfSorted(grill2))


1
你可以使用.flat()函数将嵌套数组转换为扁平化数组,并将其作为简单数组进行检查: 例如:
const grill = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
 ];
const flattedArray = grill.flat()
function chequearSiGano() {
    for(let i=0;i<(flattedArray .length-1);i++) {
      if (flattedArray[i] > flattedArray[i+1]) {
        return false;
      }
    }
    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接