Search code examples
rxjsrxjs5partitionangular2-observables

RxJS - partition array of objects


How do I partition the following array so it's partition between those under 30, and those 30 and above.

I thought the following code would do it, but it appears to just return the array, not each element:

let ageArr = [
    { name: 'Ken', age: 28 },
    { name: 'Mary', age: 70 },
    { name: 'Kate', age: 12 },
    { name: 'David', age: 37 },
    { name: 'Laura', age: 42 },
    { name: 'Ian', age: 19 },
    { name: 'Peter', age: 21 },
    { name: 'Isobel', age: 55 },
    { name: 'Rebecca', age: 15 }
];

let [under, over] = Oversable.of(ageArr).partition(person => person.age < 30);

under.subscribe(a => console.log(a)); // [ { name: 'Ken', age: 28 }, { name: 'Kate', age: 12 }, { name: 'Ian', age: 19 }, { name: 'Peter', age: 21 }, { name: 'Rebecca', age: 15 } ]
over.subscribe(a => console.log(a)); // [ { name: 'Mary', age: 70 }, { name: 'David', age: 37 }, { name: 'Laura', age: 42 }, { name: 'Isobel', age: 55 } ]

But as stated above, this seems not to work. Any idea how to achieve what I'd like to?


Solution

  • You need to use Observable.from

    let ageArr = [
        { name: 'Ken', age: 28 },
        { name: 'Mary', age: 70 },
        { name: 'Kate', age: 12 },
        { name: 'David', age: 37 },
        { name: 'Laura', age: 42 },
        { name: 'Ian', age: 19 },
        { name: 'Peter', age: 21 },
        { name: 'Isobel', age: 55 },
        { name: 'Rebecca', age: 15 }
    ];
    
    let [under, over] = Rx.Observable.from(ageArr).partition(person => person.age < 30);
    
    under.subscribe(a => console.log("Under 30: " + a.name));
    over.subscribe(a => console.log("Over 30: " + a.name));
    <script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>