I'm new to this world of vanilla javascript. I've been trying complete some challenges but it seems like I'm unable to find the solution to a challenge.
The task is:"Sort array by object property"
- Write a function that takes an array of objects as an argument
- Sort the array by property b in ascending order
- Return the sorted array
function arraySorter(arr) {
return arr
.map((e) => {
return Object.values(e);
})
.filter((e, i) => {
console.log(e[1]);
return;
});
}
console.log(
arraySorter([
{ a: 1, b: 2 },
{ a: 5, b: 4 },
])
);
Expected output
//expected output: [{a:1,b:2},{a:5,b:4}]
// expected output: [{a:5,b:4},{a:2,b:10}]
CodePudding user response:
To sort
with numbers.
- sorting ascending ( first argument - second argument )
- sorting descending ( second argument - first argument ),
as sort
function should return
- positive number if the first argument is bigger than the second argument.
- negative number if second argument is bigger than first argument.
- zero if both are equal.
function arraySorter(arr) { return arr.sort((x, y) => x.b - y.b) } console.log(arraySorter([{a:1,b:2},{a:5,b:4}])) //expected output: [{a:1,b:2},{a:5,b:4}] console.log(arraySorter([{a:2,b:10},{a:5,b:4}])) //Expected output: [{a:5,b:4},{a:2,b:10}] console.log(arraySorter([{a:1,b:7},{a:2,b:1}])) //Expected output: [{a:2,b:1},{a:1,b:7}]
CodePudding user response:
You can use the sort
method available on arrays.
You can also make your sort function more generic by accepting the key according to which the objects need to sorted and the order for sorting.
function sortArrayOfObjects(arr, sortKey, isAscending = true) {
return [...arr].sort(({ [sortKey]: a }, { [sortKey]: b }) =>
isAscending ? a - b : b - a
);
}
console.log(sortArrayOfObjects([{ a: 5, b: 2 }, { a: 1, b: 4 }], "a"));
console.log(sortArrayOfObjects([{ a: 2, b: 10 }, { a: 5, b: 4 }], "b"));
console.log(sortArrayOfObjects([{ a: 1, b: 7 }, { a: 2, b: 1 }], "a", false));