使用lodash或下划线js查找数组中字符串元素的出现次数
Find number of occurences of string elements in an Array using lodash or underscore js
我有一个格式如下的数组:
var array = [
{ id: '555weibo' },
{ id: '578weibo' },
{ id: '111facebook' },
{ id: '123facebook' },
{ id: '145facebookpage' },
{ id: '145facebookpage' },
{ id: '766facebook' },
{ id: '242facebook' },
{ id: '432twitter' },
{ id: '432exing' }
];
我需要找到 facebook
、twitter
、xing
和 weibo
在该数组中出现的次数。
例如:
{
weibo: 2,
facebook: 6,
twitter: 1,
xing: 1
}
我已经搜索了解决方案,但似乎没有任何效果。
以下代码没有给出预期的结果。非常感谢您的帮助。谢谢你。
var filtered = _.map(diff, function(value, key) {
return { id: key, count:value };
});
您必须指定可能的键,因为无法在初始数组中猜测它们。
这是一个解决方案,您不需要任何库:
var filtered = array.reduce(function(m,v){
for (var k in m) if (~v.id.indexOf(k)) m[k]++;
return m;
},{facebook:0, weibo:0, twitter:0, xing:0});
使用下划线:
var services = ['weibo', 'facebook', 'twitter', 'xing'];
var result = _.map(services, function(service){
var length = _.reject(array, function(el){
return (el.id.indexOf(service) < 0);
}).length;
return {id: service, count: length};
});
以下是使用 lodash 的方法:
_.countBy(array, _.flow(
_.method('id.replace', /^\d+/, ''),
_.method('replace', /page$/, '')
));
我有一个格式如下的数组:
var array = [
{ id: '555weibo' },
{ id: '578weibo' },
{ id: '111facebook' },
{ id: '123facebook' },
{ id: '145facebookpage' },
{ id: '145facebookpage' },
{ id: '766facebook' },
{ id: '242facebook' },
{ id: '432twitter' },
{ id: '432exing' }
];
我需要找到 facebook
、twitter
、xing
和 weibo
在该数组中出现的次数。
例如:
{
weibo: 2,
facebook: 6,
twitter: 1,
xing: 1
}
我已经搜索了解决方案,但似乎没有任何效果。
以下代码没有给出预期的结果。非常感谢您的帮助。谢谢你。
var filtered = _.map(diff, function(value, key) {
return { id: key, count:value };
});
您必须指定可能的键,因为无法在初始数组中猜测它们。
这是一个解决方案,您不需要任何库:
var filtered = array.reduce(function(m,v){
for (var k in m) if (~v.id.indexOf(k)) m[k]++;
return m;
},{facebook:0, weibo:0, twitter:0, xing:0});
使用下划线:
var services = ['weibo', 'facebook', 'twitter', 'xing'];
var result = _.map(services, function(service){
var length = _.reject(array, function(el){
return (el.id.indexOf(service) < 0);
}).length;
return {id: service, count: length};
});
以下是使用 lodash 的方法:
_.countBy(array, _.flow(
_.method('id.replace', /^\d+/, ''),
_.method('replace', /page$/, '')
));