如何用JSON计算数据?

时间:2014-11-12 10:12:28

标签: javascript jquery json

本质是我有json文件:

[
    {
        "id": 0,
        "username": "Antony",
        "users": [
            {
                "id": 1,
                "like": 0
            },
            {
                "id": 2,
                "like": 1
            },
            {
                "id": 3,
                "like": 0
            },
            {
                "id": 4,
                "like": 1
            }
        ]
    },
    {
        "id": 1,
        "username": "Janet",
        "users": [
            {
                "id": 0,
                "like": 0
            },
            {
                "id": 2,
                "like": 1
            },
            {
                "id": 3,
                "like": 1
            },
            {
                "id": 4,
                "like": 1
            }
        ]
    },.......

我需要计算每个用户有多少"喜欢"? 即: 例如,取第一个id == 0。 我们传递的对象非常多,看起来很像: 如果id == 0且like == 1,则向数组中添加1。 最后,我必须: usersWithLikes [id User] =所有对象的喜欢数量 例如:

  

usersWithLikes [0] = 3

     

usersWithLikes [1] = 1

     

usersWithLikes [2] = 4

     

usersWithLikes [3] = 0

此刻,我想是的:

thumbsUp_data - json数据

var usersWithLikes = thumbsUp_data.map(function(user_data){
                    return user_data.users.filter(function(value){
                        return value.like == 1;
                    }).length;
                });

但这不正确,因为它会考虑有多少人喜欢这个对象。 帮助做出决定......

2 个答案:

答案 0 :(得分:0)

thumbsUp_data.forEach(function(data) {
    data.users.forEach(function(value) {
        usersWithLikes[value.id] = usersWithLikes[value.id] || 0;
        usersWithLikes[value.id] += value.like;
    });
});

多数,这是一个解决方案!

答案 1 :(得分:0)

过滤掉用户对象,抓住返回数组的第一个元素,然后过滤该对象的用户数组,like === 1返回它的长度;

function howManyLikes(id) {
  return arr.filter(function (user) {
    return user.id === id;
  })[0].users.filter(function (el) {
    return el.like === 1;
  }).length;
}

howManyLikes(1); // 3

DEMO