所以我有一组数据让我们说......
{'action': 'tweet', 'user': 'loser', 'message': 'fooboo'}
{'action': 'follow', 'user': 'loser', 'message': null }
{'action': 'tweet', 'user': 'loser', 'message': 'hello'}
{'action': 'retweet', 'user': 'loser', 'message': null}
{'action': 'tweet', 'user': 'michael', 'message': 'CIA is watching'}
{'action': 'tweet', 'user': 'michael', 'message': 'HEHEHEHE'}
{'action': 'follow', 'user': 'michael', 'message': null }
我正在尝试使用reduce迭代它并返回一个用户列表,其中包含所有操作的计数,例如
{ loser:
{
tweets: 2
retweets: 1
follows: 1
}
}, michael:
{
tweets: 2
retweets: 0
follows: 1
}
}
这是我的代码......
let userCount = tweets.reduce(function(users, line, idx) {
users[line['users']] = users[line['user']] || [];
let action = line['action];
users[line.user].push({
action: users[line.user].action + 1 || 0
})
return users
}, {users: []});
我的代码未成功计算或将操作的名称作为键注入对象。这就是我的输出数据。
{ michael: [ { action: 1 } ],
loser: [ { action: 1 }, { action: 1 }, { action: 1 } ],
}
答案 0 :(得分:0)
您发布的代码存在一些问题,最明显的是您在对象和数组之间感到困惑(假设),给定您想要的输出。
以下内容可以满足您的需求,并通过评论对其进行注释,以概述正在发生的事情。
var tweets = [
{action: 'tweet', user: 'loser', message: 'fooboo'},
{action: 'follow', user: 'loser', message: null },
{action: 'tweet', user: 'loser', message: 'hello'},
{action: 'retweet', user: 'loser', message: null},
{action: 'tweet', user: 'michael', message: 'CIA is watching'},
{action: 'tweet', user: 'michael', message: 'HEHEHEHE'},
{action: 'follow', user: 'michael', message: null },
];
const users = tweets.reduce((users, tweet) => {
// Deconstruct tweet to get user and action
const {user, action} = tweet;
// Add user to users list, if they don't already exist
if (users[user] === undefined) users[user] = {};
// Increment user action count
users[user][action] = (users[user][action] || 0) + 1;
return users;
}, {});
console.log(users);