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を設定すると、変数は使用されませんnkが、実際には使用されますresult.nk

次のように保存する必要があります。

result[nk] = 1;

更新されたフィドルで示されているように:http://jsfiddle.net/qunUz/3/

于 2012-04-17T23:24:40.360 に答える
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

これがあなたがやろうとしていることだと思います。以下は、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機能をコピーします)。

于 2012-04-17T23:29:40.623 に答える