我要求找到" count"的总和。每个"类型"的字段。 有没有办法使用lodash或下划线js做同样的事情。 非常感谢您的帮助。谢谢。
输入数组
struct BuiltinTests {
pwd: PathBuf
}
impl TestFixture for BuiltinTests {
fn setup(&mut self) {
let mut pwd = env::temp_dir();
pwd.push("pwd");
fs::create_dir(&pwd);
self.pwd = pwd;
}
fn teardown(&mut self) {
fs::remove_dir(&self.pwd);
}
fn tests(&mut self) -> Vec<Box<Fn(&mut BuiltinTests)>> {
vec![Box::new(BuiltinTests::cd_with_no_args)]
}
}
impl BuiltinTests {
fn new() -> BuiltinTests {
BuiltinTests {
pwd: PathBuf::new()
}
}
}
fn cd_with_no_args(&mut self) {
let home = String::from("/");
env::set_var("HOME", &home);
let mut cd = Cd::new();
cd.run(&[]);
assert_eq!(env::var("PWD"), Ok(home));
}
#[test]
fn cd_tests() {
let mut builtin_tests = BuiltinTests::new();
test_fixture_runner(&mut builtin_tests);
}
预期输出
array = [
{
type: 'weibo',
count: 1
},
{
type: 'xing',
count: 1
},
{
type: 'twitter',
count: 1
},
{
type: 'twitter',
count: 1
},
{
type: 'facebook',
count: 1
},
{
type: 'facebook',
count: 1
},
{
type: 'facebook',
count: 1
}
]
答案 0 :(得分:2)
您可以使用_.countBy()
和_.map()
执行此操作;请注意,由于中途转换为对象,输出数组的顺序可能不同。
var array = [
{
type: 'weibo',
count: 1
},
{
type: 'xing',
count: 1
},
{
type: 'twitter',
count: 1
},
{
type: 'twitter',
count: 1
},
{
type: 'facebook',
count: 1
},
{
type: 'facebook',
count: 1
},
{
type: 'facebook',
count: 1
}
];
console.log(_.map(_.countBy(array, 'type'), function(value, key) {
return {
type: key,
count: value
};
}));
<script src="http://underscorejs.org/underscore.js"></script>
答案 1 :(得分:0)
您可以使用_.reduce
和_.values
一次性完成(通常情况下):
var sums = _(array).reduce(function(memo, e) {
if(!memo[e.type])
memo[e.type] = { type: e.type, count: 0 };
memo[e.type].count += 1;
return memo;
}, { });
var what_you_want = _(sums).values();
或者,如果您想跳过_.values
调用,您可以跟踪对象(按类型索引)和数组(您实际执行的内容)中正在进行的总和并共享{{1它们之间的引用:
{type: ..., count: ...}
后一种方法保证输出顺序与输入顺序匹配。