I have an array of objects:
const myArr = [
{ type: 'one', number: 1, fiedld: 'aaa' },
{ type: 'one', number: 2, field: 'bb' },
{ type: 'two', number: 2, field: 'xxx' },
{ type: 'two', number: 1, field: 'zz' },
{ type: 'two', number: 3, field: 'y' }
]
And I want to get objects with max value of number for each type.
So expected result is:
const newArr= [
{ type: 'one', number: 2, field: 'bb' },
{ type: 'two', number: 3, field: 'y' }
]
My current solution is:
sortByFields (field1, field2) {
return ((x, y) => {
return (
(x[field1] > y[field1]) - (y[field1] > x[field1])
|| (x[field2] > y[field2]) - (y[field2] > x[field2])
);
})
}
myArr.sort(this.sortByFields('type', 'number'));
let newArr = [];
for (let i = 0; i < myArr.length - 1; i++) {
if (myArr[i].type !== myArr[i + 1].type) {
newArr.push(myArr[i]);
}
if (i === myArr.length - 2) {
newArr.push(myArr[i + 1]);
}
}
I'm beginner in JS, but I know that it can be done in more proper way.