Many StackOverflow questions on sorting arrays in Javascript, however I could not find a question for this specific use case that involves a second array.
I have the following 2 arrays. One array is the main array of data, and the other array is used to filter + sort the main array:
let sortingArray = ['pts', 'ast', 'reb', 'stl']
let mainArray = [
{ key: 'stl', val1: '3', val2: 5 },
{ key: 'blk', val1: '5', val2: 1 },
{ key: 'pts', val1: '23', val2: 44 },
{ key: 'fgm', val1: '11', val2: 15 },
{ key: 'ast', val1: '13', val2: 15 },
{ key: 'reb', val1: '7', val2: 4 },
];
// Using the 2 arrays above, I am trying to create the following output
let outputArray = [
{ key: 'pts', val1: '23', val2: 44 },
{ key: 'ast', val1: '13', val2: 15 },
{ key: 'reb', val1: '7', val2: 4 },
{ key: 'stl', val1: '3', val2: 5 },
];
// My code so far
outputArray = mainArray
.filter(row => sortingArray.includes(row.key))
// .sort()
I can filter, however I am not sure how to handle this sort in the best manner. To clarify, I'd like the mainArray
to be sorted based on the order of values in the sortingArray
. I'm sure I could come up with an 5-10 line function that handles the sort using the sortingArray
(via a loop of the array), however it would be great if there was a cleaner, 1-2 line arrow function I could use for this. This way, I would not have to break up the chaining of functions onto the mainArray
.
Any thoughts or help on this would be great! I will update if I come up with an answer in the meanwhile.
Edit: Creating a separate-function to sort the array is quite straightforward:
let outputArray = [];
sortingArray.forEach(key => {
let obj = mainArray.filter(row => row.key === key)[0];
outputArray.push(obj);
});
However an arrow function would still be preferred here.