14

I am trying to sort an array of object by a propertytitle. This the code snippet that I am running but it does not sort anything. The array is displayed as it is. P.S I looked at previous similar questions. This one for examplehere suggests and uses the same method I am using.

The #"inside sort"); library.sort(function(a,b){return a.title - b.title;}); console.log(library);} // tail starts herevar library = [ { author: 'Bill Gates', title: 'The Road Ahead', libraryID: 1254 }, { author: 'Steve Jobs', title: 'Walter Isaacson', libraryID: 4264 }, { author: 'Suzanne Collins', title: 'Mockingjay: The Final Book of The Hunger Games', libraryID: 3245 }];sortLibrary();

The html code:

<html><head>    <meta charset="UTF-8"></head><body><h1> Test Page </h1><script src="myscript.js"> </script></body></html>
askedAug 28, 2017 at 17:56
user8528721's user avatar
1
  • "Bill Gates" - "Steve Jobs" should be what? Infinity or rather Not a Number ;)?CommentedAug 28, 2017 at 18:01

5 Answers5

16

Have you tried like this? It is working as expected

library.sort(function(a,b) {return (a.title > b.title) ? 1 : ((b.title > a.title) ? -1 : 0);} );

var library = [    {        author: 'Bill Gates',        title: 'The Road Ahead',        libraryID: 1254    },    {        author: 'Steve Jobs',        title: 'Walter Isaacson',        libraryID: 4264    },    {        author: 'Suzanne Collins',        title: 'Mockingjay: The Final Book of The Hunger Games',        libraryID: 3245    }];console.log('before sorting...');console.log(library);library.sort(function(a,b) {return (a.title > b.title) ? 1 : ((b.title > a.title) ? -1 : 0);} );console.log('after sorting...');console.log(library);

answeredAug 28, 2017 at 18:01
A l w a y s S u n n y's user avatar
Sign up to request clarification or add additional context in comments.

1 Comment

Is there any way to order this non-alphabetically, but based on another pre-set array? For example, order an entire list of names and functions but in the order of a pre-set array of functions ( chef above sous-chef, above chef de parties, ... ).
4

Subtraction is for numeric operations. Usea.title.localeCompare(b.title) instead.

function sortLibrary() {  console.log("inside sort");  library.sort(function(a, b) {    return a.title.localeCompare(b.title);  });  console.log(library);}var library = [{    author: 'Bill Gates',    title: 'The Road Ahead',    libraryID: 1254  },  {    author: 'Steve Jobs',    title: 'Walter Isaacson',    libraryID: 4264  },  {    author: 'Suzanne Collins',    title: 'Mockingjay: The Final Book of The Hunger Games',    libraryID: 3245  }];sortLibrary();

answeredAug 28, 2017 at 18:00
spanky's user avatar

Comments

2

Use the < or > operator when comparing strings in your compare function.

see documentation

answeredAug 28, 2017 at 18:01
big nol's user avatar

4 Comments

Use the > operator for this instance, this works when replacing the minus operator with >.
@jonathan.ihm: The.sort() callback expects a numeric result, not a boolean, so more than just a drop-in replacement would be needed.
I ran it in console and confirmed it worked right away. See alsostackoverflow.com/questions/51165/…
Nevermind, seestackoverflow.com/questions/34466125/… as well I stand corrected.
0

you can try this code fromhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

library.sort(function(a, b){var tA = a.title.toUpperCase();  var tB = b.title.toUpperCase();  if (tA < tB) {    return -1;  }  if (tA > tB) {    return 1;  }  return 0;})
answeredAug 28, 2017 at 18:06
Christian's user avatar

Comments

-1

Can you try this

FOR DESC

library.sort(function(a,b){return a.title < b.title;});

orFOR ASC

library.sort(function(a,b){return a.title > b.title;});
answeredAug 28, 2017 at 18:04
Nuttertools's user avatar

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.