6

I have an array of objects that looks like this:

var data = [
 {
   title: 'Shirt',
   position: 3
 },
 {
   title: 'Ball',
   position: 1,
 }
]

How could I sort it for use in a for loop like this.

for(var i in data) {

}

I tried:

for(var i in data | orderBy:'position')

But that is angular so normal Javascript it doesn't work.

I'm thinking their must be some way to sort the array before looping through it, or adding a filter to the loop, not sure which is the best way.

2
  • 2
    does this post answer your query? stackoverflow.com/questions/2466356/… Commented Jul 19, 2018 at 1:06
  • 2
    Why do you want to use a for in loop? Why not sort, whose abstract sorting rules are much easier to implement than your own custom sorting function? Commented Jul 19, 2018 at 1:06

4 Answers 4

23

But that is angular so normal Javascript it doesn't work.

Simply you can use JavaScript sort function. It will work in Angular(TypeScript) also.

Note: When sorting numbers, you can simply use the compact comparison:

myArray.sort((n1,n2) => n1 - n2);

var data = [{
    title: 'Shirt',
    position: 3
  },
  {
    title: 'Ball',
    position: 1,
  }
];

data.sort(function(a, b) {
  return a.position - b.position;
})

console.log(data);

Sign up to request clarification or add additional context in comments.

Comments

3

Use Array.prototype.sort (doc) and pass the compare function as you want:

var data = [
 {
   title: 'Shirt',
   position: 3
 },
 {
   title: 'Ball',
   position: 1,
 },
 // add for actually seeing the correct result
 {
   title: 'Cake',
   position: 2,
 }
];

function compareFunction(a,b){
  if(a.position > b.position)
    return 1;
  else
    return -1;
}

data.sort(compareFunction);

console.log(data);

Comments

0

You can use arr.sort([compareFunction]).

If compareFunction(a, b) is less than 0, sort a to an index lower than b, i.e. a comes first.

If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other, but sorted with respect to all different elements.

If compareFunction(a, b) is greater than 0, sort b to an index lower than a, i.e. b comes first.

compareFunction(a, b) must always return the same value when given a specific pair of elements a and b as its two arguments. If inconsistent results are returned then the sort order is undefined.

For Example -

     myarray.sort((a,b) => {
       if(a.position > b.position)
        return 1
        else
        return -1
})

Comments

0

Here is a bubble sort approach:

var data = [{
    title: 'Shirt',
    position: 3
  },
  {
    title: 'Ball',
    position: 1,
  },
  {
    title: "h",
    position: 0
  }
]

for (let i = 0; i < data.length; i++)
  for (let j = 0; j < data.length - 1; j++) {
    if (data[j].position > data[j + 1].position) {
      var first = data[j]
      var second = data[j + 1]
      data[j] = second;
      data[j + 1] = first;

    }

  }

console.log(data)

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.