1

嗨,我正在尝试总结我在 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/

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

4

3 回答 3

1

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

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

而不是您正在使用的点表示法

result.nk     //access the 'nk' property
result['nk']  //equivalent in bracket notation.
于 2012-04-17T23:20:53.450 回答
1

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

你应该像这样存储它:

result[nk] = 1;

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

于 2012-04-17T23:24:40.360 回答
1

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

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 函数)。

于 2012-04-17T23:29:40.623 回答