获取JavaScript对象中具有匹配键的所有值的总和?

scott_trinh

我试图做一个函数,将基于键求和。这是一个示例对象:

{
  "US": {
    "q": 1,
    "Atlanta": {
      "q": 2
    },
    "Boston": {
      "q": 1
    }
}

我希望能够调用类似以下的函数:

var sum = plucky("q", obj);
// sum === 4;

我正在使用的函数,我相信我从过去某个地方的SO帖子中发现,几乎可以完成正确的事情:

function pluckDeepKey(key, obj) {
  if (_.has(obj, key)) {
    return obj[key];
  }
  return _.reduce(_.flatten(_.map(obj, function(v) {
    return _.isObject(v) ? pluckDeepKey(key, v) : [];
  }), false), function(a,b) { return a + b });
}

但是,由于:return obj[key]它找到第一个"q",返回该值,然后退出。我整天都在挠头,认为如果我将问题抛给SO的话可能对其他人有帮助。

编辑

我认为收集我在问题正文中探索的不同方法可能对SO和我的未来自我很有用。

香草JavaScript(来自dfsq)

function plucky(key, obj) {
    var sum = 0;
    for (var prop in obj) {
        if (_.has(obj, prop) && key === prop) {
            sum += obj[prop];
        }
        else if (_.isObject(obj[prop])) {
            sum += plucky(key, obj[prop]);
        }
    }
    return sum;
}

Lodash(Underscore?)功能示例(通过Bergi)

function pluckDeepKey(key, obj) {
  return _.reduce(obj, function(a, v) {
    return a + (_.isObject(v) ? pluckDeepKey(key, v) : 0);
  }, _.has(obj, key) ? obj[key] : 0);
}

Mori.js和Immutable.js功能示例

function moriDeepKey(key, mmap) {
  return m.reduce_kv(
    function(a, k, v) { return a + (m.is_map(v) ? moriDeepKey(key, v) : 0); },
    m.has_key(mmap, key) ? mmap.get(key) : 0,
    mmap
  );
}
function iDeepKey(key, imap) {
  return imap.reduce(
    function(a, v, k) { return a + (v instanceof I.Map ? iDeepKey(key, v) : 0); },
    imap.has(key) ? imap.get(key) : 0,
    imap
  );
}
dfsq

我认为普通的javascript函数看起来会更全面,更简单:

function plucky(key, obj) {

    var sum = 0;

    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && key === prop) {
            sum += obj[prop];
        }
        else if (Object.prototype.toString.call(obj[prop]) === '[object Object]') {
            sum += plucky(key, obj[prop]);
        }
    }

    return sum;
}

function plucky(key, obj) {

    var sum = 0;

    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && key === prop) {
            sum += obj[prop];
        } 
        else if (Object.prototype.toString.call(obj[prop]) === '[object Object]') {
            sum += plucky(key, obj[prop]);
        }
    }

    return sum;
}


var obj = {
    "US": {
        "q": 1,
        "Atlanta": {"q": 2},
        "Boston": {"q": 1}
    }
};
var sum = plucky("q", obj);
alert(sum);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从对象中获取具有特定值的所有键

来自分类Dev

使用JavaScript从与字符串键匹配的数组中获取所有对象

来自分类Dev

具有不同数组的键上所有值的总和

来自分类Dev

JavaScript | 遍历JSON对象并获取特定键的所有值

来自分类Dev

查找具有匹配键的字典值的总和

来自分类Dev

如何从一键具有Array的对象数组中获取不同的值并计算JavaScript?

来自分类Dev

Excel - 如何查找具有匹配键的所有值?

来自分类Dev

Obj-C-获取键中所有值的总和?

来自分类Dev

Obj-C-获取键中所有值的总和?

来自分类Dev

Rails 4 中具有匹配数组值的哈希中的所有键

来自分类Dev

如何从JSON对象数组中删除具有特定键/值对的所有JSON对象?

来自分类Dev

从MultiValueMap获取具有相同键的所有对象

来自分类Dev

包含键中项的字典中所有值的总和

来自分类Dev

仅获取具有匹配键的json对象

来自分类Dev

从列中获取所有匹配值

来自分类Dev

使用Javascript或JQuery从对象列表中获取所有值

来自分类Dev

检索具有特定值的对象数组中的所有键

来自分类Dev

Javascript:如果对象具有匹配的键,如何用第二个对象中的值替换第一个对象的值

来自分类Dev

使用JSON和JQ中的特定键获取具有所有值的数组

来自分类Dev

从Redis通过Lua获取所有与键模式匹配的值

来自分类Dev

使用JavaScript和/或D3.js在对象数组中获取给定键的所有值

来自分类Dev

如何从对象数组中获取具有特定键唯一值的对象?

来自分类Dev

从对象列表Javascript / TypeScript获取所有可能的对象键

来自分类Dev

获取所有具有包含特定值的数组的对象

来自分类Dev

过滤对象并获取具有相同值javascript的所有项目

来自分类Dev

如何在Dataweave 2.0中获取某个键匹配的所有值?

来自分类Dev

获取与数组中的特定值匹配的多维数组的所有键

来自分类Dev

如何从Java和Jackson解析器中的JSON获取所有匹配键的值

来自分类Dev

如果 hashMap 具有相同的键名,我如何获取对象数组中的所有值

Related 相关文章

  1. 1

    从对象中获取具有特定值的所有键

  2. 2

    使用JavaScript从与字符串键匹配的数组中获取所有对象

  3. 3

    具有不同数组的键上所有值的总和

  4. 4

    JavaScript | 遍历JSON对象并获取特定键的所有值

  5. 5

    查找具有匹配键的字典值的总和

  6. 6

    如何从一键具有Array的对象数组中获取不同的值并计算JavaScript?

  7. 7

    Excel - 如何查找具有匹配键的所有值?

  8. 8

    Obj-C-获取键中所有值的总和?

  9. 9

    Obj-C-获取键中所有值的总和?

  10. 10

    Rails 4 中具有匹配数组值的哈希中的所有键

  11. 11

    如何从JSON对象数组中删除具有特定键/值对的所有JSON对象?

  12. 12

    从MultiValueMap获取具有相同键的所有对象

  13. 13

    包含键中项的字典中所有值的总和

  14. 14

    仅获取具有匹配键的json对象

  15. 15

    从列中获取所有匹配值

  16. 16

    使用Javascript或JQuery从对象列表中获取所有值

  17. 17

    检索具有特定值的对象数组中的所有键

  18. 18

    Javascript:如果对象具有匹配的键,如何用第二个对象中的值替换第一个对象的值

  19. 19

    使用JSON和JQ中的特定键获取具有所有值的数组

  20. 20

    从Redis通过Lua获取所有与键模式匹配的值

  21. 21

    使用JavaScript和/或D3.js在对象数组中获取给定键的所有值

  22. 22

    如何从对象数组中获取具有特定键唯一值的对象?

  23. 23

    从对象列表Javascript / TypeScript获取所有可能的对象键

  24. 24

    获取所有具有包含特定值的数组的对象

  25. 25

    过滤对象并获取具有相同值javascript的所有项目

  26. 26

    如何在Dataweave 2.0中获取某个键匹配的所有值?

  27. 27

    获取与数组中的特定值匹配的多维数组的所有键

  28. 28

    如何从Java和Jackson解析器中的JSON获取所有匹配键的值

  29. 29

    如果 hashMap 具有相同的键名,我如何获取对象数组中的所有值

热门标签

归档