【问题标题】:Javascript sum values in 3 objects3 个对象中的 Javascript 总和值
【发布时间】:2012-04-17 23:16:13
【问题描述】:

您好,我正在尝试对 3 个 json 对象中的值求和。

var things = {
    "noun": {
        "syn": ["belongings", "holding", "stuff", "property"]
    }
};
var stuff = {
    "noun": {
        "syn": ["belongings", "holding", "property"]
    }
};
var crap = {
    "noun": {
        "syn": ["things", "holding", "waste"]
    }
};

result = {};
word1 = things.noun.syn
for (key in word1) {
    nk = word1[key];
    if (result.nk == undefined) {
        result.nk = 1
    } else {
        result.nk = result.nk + 1;
    }
}
console.log(result);​

例如,我得到的结果是 result.nk 而不是 result.belongings

我一直在玩 jsfiddle:http://jsfiddle.net/qunUz/2/

如何计算每个值出现的次数?

【问题讨论】:

  • 顺便说一句,您不应该使用 for-in 循环来迭代数组。请改用常规 for 循环或 forEach 方法。
  • @missingno 我以为你应该对对象使用 for-in ? (它不是一个数组)。我错了吗?
  • 嗯,在你写的代码中word1是一个数组...

标签: javascript arrays json object


【解决方案1】:

要访问给定字符串值的属性,您应该使用括号表示法

result[nk] //access the property defined by nk's value

而不是您使用的点符号

result.nk     //access the 'nk' property
result['nk']  //equivalent in bracket notation.

【讨论】:

    【解决方案2】:

    通过设置 result.nk 你不是在使用变量nk,而是真正使用result.nk

    你应该这样存储它:

    result[nk] = 1;
    

    就像在更新的小提琴上演示的那样:http://jsfiddle.net/qunUz/3/

    【讨论】:

      【解决方案3】:

      我认为这就是你想要做的。下面将总结三个不同数组中每个值的出现次数。

      var a = things.noun.syn.concat(stuff.noun.syn).concat(crap.noun.syn);
      var a = a.reduce(function (acc, curr) {
        if (typeof acc[curr] == 'undefined') {
          acc[curr] = 1;
        } else {
          acc[curr] += 1;
        }
      
        return acc;
      }, {});
      

      结果

      belongings: 2
      holding: 3
      property: 2
      stuff: 1
      things: 1
      waste: 1
      

      如果你的目标浏览器没有reduce函数,你可以使用underscore.js(或者直接复制他们的reduce函数)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-30
        • 1970-01-01
        • 2016-09-25
        • 1970-01-01
        • 2021-09-02
        • 2021-03-15
        • 1970-01-01
        • 2017-06-04
        相关资源
        最近更新 更多