Sorting object property by values
Move them to an array, sort that array, and then use that array for your purposes. Here's a solution:
let maxSpeed = {
car: 300,
bike: 60,
motorbike: 200,
airplane: 1000,
helicopter: 400,
rocket: 8 * 60 * 60
};
let sortable = [];
for (var vehicle in maxSpeed) {
sortable.push([vehicle, maxSpeed[vehicle]]);
}
sortable.sort(function(a, b) {
return a[1] - b[1];
});
// [["bike", 60], ["motorbike", 200], ["car", 300],
// ["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]
Once you have the array, you could rebuild the object from the array in the order you like, thus achieving exactly what you set out to do. That would work in all the browsers I know of, but it would be dependent on an implementation quirk, and could break at any time. You should never make assumptions about the order of elements in a JavaScript object.
let objSorted = {}
sortable.forEach(function(item){
objSorted[item[0]]=item[1]
})
In ES8, you can use Object.entries()
to convert the object into an array:
const maxSpeed = {
car: 300,
bike: 60,
motorbike: 200,
airplane: 1000,
helicopter: 400,
rocket: 8 * 60 * 60
};
const sortable = Object.entries(maxSpeed)
.sort(([,a],[,b]) => a-b)
.reduce((r, [k, v]) => ({ ...r, [k]: v }), {});
console.log(sortable);
Sort array of objects by string property value
It's easy enough to write your own comparison function:
function compare( a, b ) {
if ( a.last_nom < b.last_nom ){
return -1;
}
if ( a.last_nom > b.last_nom ){
return 1;
}
return 0;
}
objs.sort( compare );
Or inline (c/o Marco Demaio):
objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0))
Or simplified for numeric (c/o Andre Figueiredo):
objs.sort((a,b) => a.last_nom - b.last_nom); // b - a for reverse sort
Sorting an array of objects by property values
Sort homes by price in ascending order:
homes.sort(function(a, b) {
return parseFloat(a.price) - parseFloat(b.price);
});
Or after ES6 version:
homes.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
Some documentation can be found here.
For descending order, you may use
homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price));
Sort object of objects by property value (passing by tuples)
In vanilla JS use Object.entries
:
const data = {FR: {total: 875, min: 4, cutValue: 56},DE: {total: 478, min: 50, cutValue: 5},UK: {total: 1505, min: 0, cutValue: 0},PO: {total: 2995, min: 0, cutValue: 4},IT: {total: 1840, min: 10, cutValue: 3},ES: {total: 629, min: 30, cutValue: 33},};
let result = Object.entries(data).sort((a, b) => b[1].total - a[1].total);
console.log(result);
Sorting an array of objects based on all of its property values
You need to apply the comparisons one after another, linked by the "or" (||
) operator. The or operator will not process its second argument if the first one was found to be truthy, i. e. if it returned a value different from 0.
Comparing numbers is easiest accomplished by a simple subtraction. Strings can be compared with String.prototype.localeCompare()
:
const arr = [{name: "A",age: 22,rating: 5,satisfaction: 2},{name: "B",age: 25,rating: 7,satisfaction: 4},{name: "C",age: 22,rating: 9,satisfaction: 8}];
arr.sort((a,b)=>
b.age-a.age ||
b.rating-a.rating ||
b.satisfaction-a.satisfaction ||
b.name.localeCompare(a.name))
console.log(arr);
Sorting object property by values
Move them to an array, sort that array, and then use that array for your purposes. Here's a solution:
let maxSpeed = {
car: 300,
bike: 60,
motorbike: 200,
airplane: 1000,
helicopter: 400,
rocket: 8 * 60 * 60
};
let sortable = [];
for (var vehicle in maxSpeed) {
sortable.push([vehicle, maxSpeed[vehicle]]);
}
sortable.sort(function(a, b) {
return a[1] - b[1];
});
// [["bike", 60], ["motorbike", 200], ["car", 300],
// ["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]
Once you have the array, you could rebuild the object from the array in the order you like, thus achieving exactly what you set out to do. That would work in all the browsers I know of, but it would be dependent on an implementation quirk, and could break at any time. You should never make assumptions about the order of elements in a JavaScript object.
let objSorted = {}
sortable.forEach(function(item){
objSorted[item[0]]=item[1]
})
In ES8, you can use Object.entries()
to convert the object into an array:
const maxSpeed = {
car: 300,
bike: 60,
motorbike: 200,
airplane: 1000,
helicopter: 400,
rocket: 8 * 60 * 60
};
const sortable = Object.entries(maxSpeed)
.sort(([,a],[,b]) => a-b)
.reduce((r, [k, v]) => ({ ...r, [k]: v }), {});
console.log(sortable);
Related Topics
JavaScript Function Order: Why Does It Matter
How to Intercept All Ajax Requests Made by Different Js Libraries
Element Not Visible Error (Not Able to Click an Element)
Javascript: Simple Way to Check If Variable Is Equal to One of Two or More Values
What Is {This.Props.Children} and When You Should Use It
How to Require a Controller in an Angularjs Directive
Getting the User Id from a Database Trigger in Cloud Functions for Firebase
Using Ajax to Read Local Files
How to Get the Current Time Only in JavaScript
Convert Js Object to Form Data
Why Use Object.Prototype.Hasownproperty.Call(Myobj, Prop) Instead of Myobj.Hasownproperty(Prop)
How to Stop a Window.Setinterval in JavaScript
Firebase Query Methods Startat() Taking Case Sensitive Parameters
Check Whether an Array Exists in an Array of Arrays
Facebook How to Check If User Has Liked Page and Show Content