繁体   English   中英

如何从嵌套数组中获取最大数组大小?

[英]How to get the max array size from nested arrays?

我有以下示例对象。 可能有任何深度的数据,而不仅仅是3的示例。

{
  'name': 'Clifford Shanks',
  'born': 1862,
  'died': 1906,
  'location': 'Petersburg, VA',
  'children': [
    {
      'name': 'Elizabeth Shanks',
      'born': 1795,
      'died': 1871,
      'location': 'Ireland/Petersburg, VA'
    }
  ],
  'parents': [
    {
      'name': 'James Shanks',
      'born': 1831,
      'died': 1884,
      'location': 'Petersburg, VA',
      'parents': [
        {
          'name': 'Robert Shanks',
          'born': 1781,
          'died': 1871,
          'location': 'Ireland/Petersburg, VA'
        },
        {
          'name': 'Elizabeth Shanks',
          'born': 1795,
          'died': 1871,
          'location': 'Ireland/Petersburg, VA'
        },
        {
          'name': 'Elizabeth Shanks',
          'born': 1795,
          'died': 1871,
          'location': 'Ireland/Petersburg, VA'
        }
      ]
    },
    {
      'name': 'Ann Emily Brown',
      'born': 1826,
      'died': 1866,
      'location': 'Brunswick/Petersburg, VA',
      'parents': [
        {
          'name': 'Henry Brown',
          'born': 1792,
          'died': 1845,
          'location': 'Montgomery, NC'
        },
        {
          'name': 'Sarah Houchins',
          'born': 1793,
          'died': 1882,
          'location': 'Montgomery, NC'
        }
      ]
    }
  ]
}

我想要一些给我答案3因为其中一个parents数组的长度为3。尽管我会使用lodash抽出所有数组,但我可以从那里弄清楚形式,但是当我_.pluck(data, 'parents')我得到

[undefined, undefined, undefined, undefined, undefined, undefined]

这比任何东西都奇怪,因为只有3个parents数组,但我得到了6个undefined。

任何想法如何获得最大parents数组大小?

如果您没有指定深度的数据,则递归是遍历数据的好方法。 我不认为lodash的pluck会做一个深入了解一个树状结构喜欢你的例子。

var maxParents = 0;
var findMaxParents = function(data) {

  // if there are grandparents, let's see how many there are
  if(data.parents && data.parents.length > 0) {
    data.parents.forEach(function(parent){
      findMaxParents(parent);
    });
  }

  if(data.parents && data.parents.length > maxParents) {
    maxParents = data.parents.length;
  }
  return maxParents;
}

这是一个带有一些console.logging的JSFiddle: http : //jsfiddle.net/uerwzm0L/

假设上面的整个对象都分配给var obj:

var size = 0;

obj.parents.forEach(function(parent) {
    if(parent.parents && parent.parents.length > size)
        size = parent.parents.length
})

// If you need to include the 'parent' parents array size, 
// add the following check
if(obj.parents.length > size)
     size = obj.parents.length;
// end check

return size;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM