'use distinctUntilChanged on objects
How can I have distinctUntilChanged
work with objects like this
myObs = Observable.from([{foo: 'bar'}, {foo: 'bar'}]);
myObs.distinctUntilChanged()
.subscribe(value => {
// I only want to receive {foo: 'bar'} once
});
Solution 1:[1]
You need to pass a function inside the distinctUntilChanged
that returns a boolean to make sure that the objects are the same.
Example
myObs. distinctUntilChanged((a, b) => a.foo === b.foo)
Solution 2:[2]
distinctUntilChanged
takes a function comparator argument, since the default is to compare using ===
equality (which is always different for different object references):
// compare by .foo which is a primitive
myObs.distinctUntilChanged((x,y) => y.foo === x.foo)
.subscribe(value => {
// receive {foo: 'bar'} once
});
Solution 3:[3]
You can also use distinctUntilKeyChanged
if you want to compare based on an object property.
myObs.distinctUntilKeyChanged('foo')
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Fabio Carpinato |
Solution 2 | Benjamin Gruenbaum |
Solution 3 | Anh-Thi DINH |