【问题标题】:How to find number of keys with certain values in a deep Javascript object? [duplicate]如何在深度 Javascript 对象中查找具有特定值的键的数量? [复制]
【发布时间】:2016-12-02 13:35:28
【问题描述】:

我有以下深层 Javascript 对象,我如何找到值为“foo”的“type”键的数量?

{
    ...
    blocks: [{
        items: [{
            type: "foo"
        },
        {
            type: "subBlock",
            items: [{
                type: "foo"
            }]
        }]
    },
    {
        items: [{
            type: "foo"
        },
        {
            type: "foo"
        }]
    }]
    ...
}

【问题讨论】:

  • forEach & Object.keys 可能会帮助你
  • 您必须遍历对象并为每个键断言它是否具有值"foo"

标签: javascript


【解决方案1】:

您可以创建递归函数来循环您的数据结构并返回总计数。

var obj = {
  blocks: [{
    items: [{
      type: "foo"
    }, {
      type: "subBlock",
      items: [{
        type: "foo"
      }]
    }]
  }, {
    items: [{
      type: "foo"
    }, {
      type: "foo"
    }]
  }]
}

function countFoo(data) {
  var result = 0;
  if (typeof data == 'object' && !Array.isArray(data)) {
    Object.keys(data).forEach(function(e) {
      if (e == 'type' && data[e] == 'foo') {
        result++;
      } else if (typeof data[e] == 'object') {
        result += countFoo(data[e]);
      }
    })
  } else if (Array.isArray(data)) {
    data.forEach(function(e) {
      if (typeof e == 'object') {
        result += countFoo(e);
      }
    })
  }
  return result;
}

console.log(countFoo(obj))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2018-12-05
    • 2020-06-24
    • 2012-06-05
    • 2019-02-26
    • 2015-09-16
    • 2015-10-04
    相关资源
    最近更新 更多