gpt4 book ai didi

javascript - RxJ 中的 GroupBy 和 Sum

转载 作者:行者123 更新时间:2023-11-28 13:20:46 28 4
gpt4 key购买 nike

我无法理解使用 Lodash 可以轻松完成的事情。我需要 groupBysum,类似这样,仅使用 RxJs:

let arr = [
{n: 'a', q: 1 },
{n: 'a', q: 2},
{n: 'b', q: 4 }
];

let v = _(arr).chain().groupBy('n').map(sumQt).value()

function sumQt(x) {
return { name: x[0].n, qt: _.sum(x, 'q') }
}

// it produces array like: [{ name: "a", qt: 3 }, { name: "b", qt: 4 }]

jsbin here

最佳答案

我现在想不出任何方法可以仅使用 rx 优雅地解决它 - 使用 rx + lodash 可以吗?

jsbin

// setup
let arr = [{n: 'a', q: 1 },
{n: 'a', q: 2},
{n: 'b', q: 3 }];

function sumQt(x) {
return { name: x[0].n, qt: _.sum(x, 'q') }
}

使用洛达什

let v = _(arr)
.chain()
.groupBy('n')
.map(sumQt)
.value()

console.log('lodash:', v)

仅使用 rx

Rx.Observable.from(arr)
.groupBy(x => x.n)
.flatMap(group => {
return group.reduce((acc, currentValue) => {
acc.n = currentValue.n;
acc.qt = acc.qt + currentValue.q;
return acc;
}, {n: undefined, qt: 0})
})
.subscribe(sum => console.log('rx:', sum));

如果您可以使用q而不是qt,那会更漂亮

Rx.Observable.from(arr)
.groupBy(x => x.n)
.flatMap(group => {
return group.reduce((acc, currentValue) => {
acc.q = acc.q + currentValue.q;
return acc;
})
})
.subscribe(sum => console.log('rx:', sum));

使用 rx 和 lodash

Rx.Observable.from(arr)
.groupBy(x => x.n)
.flatMap(group => group.toArray())
.map(sumQt)
.subscribe(sum => console.log('rx+lodash:', sum));

关于javascript - RxJ 中的 GroupBy 和 Sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com