在 JavaScript 中测试多维数组

Testing multidimensional arrays in javascript

本文关键字:数组 测试 JavaScript      更新时间:2023-09-26

我在FreeCodeCamp上解决挑战。下面的代码通过了他们的测试,挑战标记为已解决,但我自己的测试没有通过,我只是不明白为什么......

function chunk(arr, size) {
    if (size >= arr.length || size <= 0)
        return [arr];
    var result = [];
    var i = 0;
    while(arr.length > 0) {
        result.push([]);
        for (var j = 0; j < size && arr.length > 0; ++j) {
            result[i].push(arr.shift());
        }
        i++;
    }
    return result;
}
alert(chunk(["a", "b", "c", "d"], 2) == [["a", "b"], ["c", "d"]]);

如果我正确理解了 JS 中的数组含义,警报应该打印为 true,但它打印为 false,我不知道为什么?

这是有效的:

function chunk(arr, size) {
  if (size >= arr.length || size <= 0)
    return [arr];
  var result = [];
  var i = 0;
  while (arr.length > 0) {
    result.push([]);
    for (var j = 0; j < size && arr.length > 0; ++j) {
      result[i].push(arr.shift());
    }
    i++;
  }
  return result;
}
var array1 = chunk(["a", "b", "c", "d"], 2);
var array2 = [
  ["a", "b"],
  ["c", "d"]
];
var equals = (array1.length == array2.length) && array1.every(function(element, index) {
  return (element.length == array2[index].length) && element.every(function(element1, index1) {
    return element1 === array2[index][index1];
  });
});
alert(equals);

更多信息:如何使用Javascript比较两个数组相等?

这是最有效的解决方案:

function chunk(arr, size) {
    var output = [];
    var length = arr.length;
    for (var x = 0, length = arr.length; x < length; x = x + size) {
        output.push(arr.slice([x], x + size));
    }
    return output;
}
var array1 = chunk(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M'], 2);
var array2 = [
    ["A", "B"],
    ["C", "D"],
    ["E", "F"],
    ["G", "H"],
    ["J", "K"],
    ["L", "M"]
]
var equals = (array1.length == array2.length) && array1.every(function(element, index) {
  return (element.length == array2[index].length) && element.every(function(element1, index1) {
    return element1 === array2[index][index1];
  });
});
alert(equals);