检查n个数组是否相同长度的最有效方法是什么?

时间:2018-10-02 21:05:42

标签: javascript arrays

在JavaScript中检查switch-case数组的长度是否最有效的方法是什么?

4 个答案:

答案 0 :(得分:3)

Array.every与长度访问器一起使用。

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const array3 = [7, 8, 9, 0];

const firstLength = array1.length;
const allSameLength = [array2, array3]
    .every(({length}) => length === firstLength);

console.log(allSameLength);

答案 1 :(得分:2)

如果要检查其长度的数组存储在“父”数组中,则只需使用every来检查迭代数组的length是否与长度相同第一个。

示例:

const array = [
  ["a", "b", "c"],
  [1, 2, 3],
  [[1, 2], 3, "f"]
];

const equal = array.every((val, i, arr) => val.length === arr[0].length);

console.log(equal);

答案 2 :(得分:1)

初始化数组的数组,使用map对每个元素应用.length函数,然后返回数组的最小值和最大值是否相等。

您还可以只存储一个变量,该变量是您遇到的第一个数组长度,然后检查每个数组的长度是否与该数组相同。

我不确定JS中的min / max函数是对数组进行排序还是对数组进行O(n)搜索,但是第二种方法肯定是O(n)。

编辑:我想'every'函数也是O(n),但我不确定(如果更好,我会感到很惊讶,如果更糟,我会感到惊讶)。

答案 3 :(得分:0)

一旦找到一个长度与第一个数组不同的数组,就会知道它们的长度并不相同。否则,您只需检查.length即可确定每个数组,因此不会比这快。

function checkLengths() {
  var len = arguments[0].length;
  for(var i = 1; i < arguments.length; i++) {
    if(arguments[i].length != len) {
      return false;
    }
  }
  return true;
}

var arr1 = [0, 1, 2];
var arr2 = ['lala', 'ayy', 'whatup'];
var arr3 = ['what in the worlddddd'];

console.log('Same lengths:', checkLengths(arr1, arr2));
console.log('Same lengths:', checkLengths(arr1, arr2, arr3));

我不希望其他答案有明显不同...