首页 > 解决方案 > 如何迭代 3-d 数组的长度

问题描述

如果我有这样的数组:

    data= [[[22127.0, 2611.0, 20, 'call', 'san'], [1568.0, 1234.0, 20, 'sales-data-allocation', 'san'], [586404.0, 20449.0, 20, 'professional', 'san'], [290715.0, 15526.0, 20, 'metrics', 'san'], [279549.0, 24066.0, 
    20, 'hospital', 'san'], [150256.0, 15417.0, 20, 'dcr', 'san'], [112073.0, 12136.0, 20, 'coaching', 'san'], [951.0, 79.0, 20, 'event', 'san'], [25453.0, 9575.0, 20, 'tth-appeal', 'san'], [25402.0, 2296.0, 20, speaker-dcr', 'san'], [15791.0, 6943.0, 20, 'product', 'san'], [2793.0, 1745.0, 20, 'advice', 'san']],  
 [[3361925.0, 28775.0, 20, 'call', 'd'], [20391.0, 15698.0, 20, 'professional', 'd'], [11824.0, 378.0, 20, 'hospital', 'd'], [905.0, 9194.0, 20, 'dcr', 'd'], [13247.0, 365.0, 20, 'metrics', 'd']], 
[[3512274.0, 6177.0, 20, 'sales-data-allocation', 'yi'], [10.0, 212611.0, 20, 'call', 'yi'], [3656.0, 4377.0, 20, 'event', 'yi'], [57382.0, 3721.0, 20, 'professional', 'yi'], [1277.0, 361.0, 20, 'hospital', 'yi'], [13759.0, 1251.0, 20, 'dcr', 'yi'], [10044.0, 1588.0, 20, 'metrics', 'yi'], [3223.0, 14210.0, 2, 'product', 'yi'], [2921.0, 261.0, 20, 'coaching', 'yi'], [512.0, 315.0, 20, 'speaker-dcr', 'yi']]]

我怎样才能得到这个数组的长度?

标签: javascript

解决方案


如果您知道它是 3d,请.flat(2) 在此处使用参考

const data = [
  [
    [22127.0, 2611.0, 20, 'call', 'san'],
    [1568.0, 1234.0, 20, 'sales-data-allocation', 'san'],
    [586404.0, 20449.0, 20, 'professional', 'san'],
    [290715.0, 15526.0, 20, 'metrics', 'san'],
    [279549.0, 24066.0, 20, 'hospital', 'san'],
    [150256.0, 15417.0, 20, 'dcr', 'san'],
    [112073.0, 12136.0, 20, 'coaching', 'san'],
    [951.0, 79.0, 20, 'event', 'san'],
    [25453.0, 9575.0, 20, 'tth-appeal', 'san'],
    [25402.0, 2296.0, 20, 'speaker-dcr', 'san'],
    [15791.0, 6943.0, 20, 'product', 'san'],
    [2793.0, 1745.0, 20, 'advice', 'san']
  ],
  [
    [3361925.0, 28775.0, 20, 'call', 'd'],
    [20391.0, 15698.0, 20, 'professional', 'd'],
    [11824.0, 378.0, 20, 'hospital', 'd'],
    [905.0, 9194.0, 20, 'dcr', 'd'],
    [13247.0, 365.0, 20, 'metrics', 'd']
  ],
  [
    [3512274.0, 6177.0, 20, 'sales-data-allocation', 'yi'],
    [10.0, 212611.0, 20, 'call', 'yi'],
    [3656.0, 4377.0, 20, 'event', 'yi'],
    [57382.0, 3721.0, 20, 'professional', 'yi'],
    [1277.0, 361.0, 20, 'hospital', 'yi'],
    [13759.0, 1251.0, 20, 'dcr', 'yi'],
    [10044.0, 1588.0, 20, 'metrics', 'yi'],
    [3223.0, 14210.0, 2, 'product', 'yi'],
    [2921.0, 261.0, 20, 'coaching', 'yi'],
    [512.0, 315.0, 20, 'speaker-dcr', 'yi']
  ]
];

function getArrayDepth(value) {
  return Array.isArray(value) ? 
    1 + Math.max(...value.map(getArrayDepth)) :
    0;
}

const arrayDepth = getArrayDepth(data);

console.log(data.flat(arrayDepth-1).length);


更新:

如果您不知道它是 3d,则必须先计算出数组的深度,然后从中减去 1。在更新的答案中,我使用了答案中采用的方法。


推荐阅读