[
{
assigned_user:{
name:'Paul',
id: 34158
},
doc_status: "processed"
},
{
assigned_user:{
name:'Simon',
id: 48569
},
doc_status: "processed"
},
{
assigned_user:{
name:'Simon',
id: 48569
},
doc_status: "processed"
}
];
我们说我有上面的数组。
我正在寻找一个可以计算我们遇到每个unqiue用户多少次的函数,然后将结果推送到另一个数组中:
所以,我希望得到这样的东西:
[
{
user:"Simon",
count: 2
},
{
user: "Paul",
count: 1
}
];
有什么想法吗?
我尝试通过接受所有独特用户来解决,然后计算每个用户出现在我的阵列中的时间,但我无法解决这个问题。
答案 0 :(得分:0)
Ecmascript5 解决方案(Array.prototype.reduce()
和Array.prototype.map()
函数):
var arr = [
{assigned_user:{name:'Paul',id: 34158},doc_status: "processed"}, {assigned_user:{name:'Simon',id: 48569},doc_status: "processed"}, {assigned_user:{name:'Simon',id: 48569},doc_status: "processed"}
];
var counts = arr.reduce(function (r, o) {
var user = o.assigned_user.name; // getting reference to username
(r[user])? ++r[user] : r[user] = 1; // accumulating username occurrences
return r;
}, {}),
// costructing the final structure `user`:`count`
result = Object.keys(counts).map(function (k) {
return {user: k, count: counts[k]};
});
console.log(result);

答案 1 :(得分:0)
const a = [{assigned_user:{name:'Paul',id: 34158},doc_status: "processed"},{assigned_user:{name:'Simon',id: 48569},doc_status: "processed"},{assigned_user:{name:'Simon',id: 48569},doc_status: "processed"}];
const b = [...new Set(a.map(x => x.assigned_user.name))]
.map(x => Object.assign({}, {user: x, count: a.filter(e => e.assigned_user.name === x).length}))
console.log(JSON.stringify(b, null, 2))
答案 2 :(得分:0)
您可以使用哈希表作为对用户计数的引用。
然后迭代给定的数组并检查哈希表是否包含用户对象。如果没有创建一个并将对象推送到结果集。
增加用户在哈希表对象上的计数。
稍后,您可以在顶部对顶部计数排序结果数组。
var data = [{ assigned_user: { name: 'Paul', id: 34158 }, doc_status: "processed" }, { assigned_user: { name: 'Simon', id: 48569 }, doc_status: "processed" }, { assigned_user: { name: 'Simon', id: 48569 }, doc_status: "processed" }],
count = data.reduce(function (hash) {
return function (r, a) {
var user = a.assigned_user.name;
if (!hash[user]) {
hash[user] = { user: user, count: 0 };
r.push(hash[user]);
}
hash[user].count++;
return r;
};
}(Object.create(null)), []);
count.sort(function (a, b) { return b.count - a.count; });
console.log(count);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:0)
您可以使用JSON.stringify()
,.match()
与RegExp
/("name":)"\w+(?=")/
一起获取"name"
来自对象.replace()
的属性和值{{1} } RegExp
删除属性名称; /["]|name":/g
循环和for..of
检查属性是否存在于对象中,如果不是Array.prototype.find()
对象到数组,则增加.push()
属性
"count"