4

各プロパティの数を返したい。たとえば、各グループの人数を返したいとします。したがって、次の JSON では、グループ 1 に 3 人、グループ 3 に 3 人、グループ 16 に 2 人というように返されます。

Javascript または jQuery ソリューションを探しています。

注: JSON の解析に助けは必要ありません。各出現回数を見つけるのに助けが必要なだけです。

{
"people":[
    {"id":"0","name":"Mike Johnson","group":1},
    {"id":"1","name":"Bob Smith","group":2},
    {"id":"2","name":"Richard Thomas","group":3},
    {"id":"3","name":"Betty White","group":16},
    {"id":"4","name":"Tim Thompson","group":3},
    {"id":"5","name":"Carl Lewis","group":16},
    {"id":"6","name":"Kathy Towers","group":3},
    {"id":"7","name":"Billy Bob","group":1},
    {"id":"8","name":"Sally Bailey","group":1}
    ]
}
4

2 に答える 2

4

いくつかのコメントが言ったように、「people」配列をループする必要があります。この「機能」を私のような関数に変えるのは簡単なので、検索するグループを指定するだけで、人数を取得できます。

http://jsfiddle.net/UdhRW/

var obj = {
  "people": [
    {"id":"0","name":"Mike Johnson","group":1},
    {"id":"1","name":"Bob Smith","group":2},
    {"id":"2","name":"Richard Thomas","group":3},
    {"id":"3","name":"Betty White","group":16},
    {"id":"4","name":"Tim Thompson","group":3},
    {"id":"5","name":"Carl Lewis","group":16},
    {"id":"6","name":"Kathy Towers","group":3},
    {"id":"7","name":"Billy Bob","group":1},
    {"id":"8","name":"Sally Bailey","group":1}
    ]
};

function getCount(group) {
    var count = 0;
    for (var i = 0; i < obj.people.length; i++) {
        if (obj.people[i].group == group) {
            count++;
        }
    }
    return count;
}

getCount(1);   // should return 3

グローバルでない場合objは、関数に渡すことができ、次のようになります。

function getCount(arr, group) {
    var count = 0;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].group == group) {
            count++;
        }
    }
    return count;
}

getCount(obj.people, 1);   // should return 3
于 2012-10-03T15:48:50.283 に答える
1

次のようなものを使用して、グループを抽出できます。

> var groups = foo['people'].map(function(value, index) {return value['group']});
[1, 2, 3, 16, 3, 16, 3, 1, 1]

そこから、これらのキーを持つオブジェクトを作成するだけです:

var group_count = {};

groups.forEach(function(value, index) {
    if (value in group_count) {
        group_count[value] += 1;
    } else {
        group_count[value] = 1;
    }
});

これにより、各グループの出現回数を含むオブジェクトが得られます。

forEachまた、このコードは IE8 以下では機能しないため、Web 上のどこかで aとmappolyfillを見つける必要があります。

于 2012-10-03T15:51:35.043 に答える