2014-10-06 5 views
0
  • Мое требование - сортировка объектов по цене. Основываясь на деньгах, объекты необходимо сортировать.
  • Ниже приведены образцы данных, которые я утешил, и получил и показал ниже.сортировать объект по цене с помощью jquery

  • С помощью утешителя full_sky.sort (test); я получаю данные ниже.


0: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 44499 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 

1: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 2299 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 

2: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 3399 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 

Выход должен быть что-то вроде этого

1: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 2299 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 

2: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 3399 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 

0: Object 
id: 1 
test: Array[1] 
0: Object 
fuldata: "xyz" 
pat: "xyz" 
img: "6E.gif" 
nos: "0 - stop" 
show_price: 1 
sour: "BLR" 
tickettype: "e" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
price: Array[1] 
0: Object 
cash: 44499 
total_surcharge: 885 
total_tax: 1414 
__proto__: Object 
length: 1 
+0

Что такое 'test' в' full_sky.sort (test) ' –

+0

ответ от api, получаемый в виде json, присваивание данных переменным и нажатие на full_sky.push (test); – sivashanker

ответ

0

Это также может быть сделано как:

var myObject= [ 
      { Cash: 323, Text: "abc" }, 
      { Cash: 4567, Text: "zxc" }, 
      { Cash: 83456, Text: "fgg" }, 
      { Cash: 72, Text: "hjk" }, 
      { Cash: 1, Text: "tyu" }, 
      { Cash: 543, Text: "bgt" }, 
      { Cash: 245, Text: "ljj" }, 
      { Cash: 68798, Text: "mnu" } 
    ]; 

    // Sort ascending 
    myObject.sort(function (a,b){ 
     if (a.Cash < b.Cash) 
      return -1; 
     if (a.Cash> b.Cash) 
      return 1; 
     return 0; 
    }); 

    // Sort descending 
    myObject.sort(function (a,b){ 
     if (a.Cash < b.Cash) 
      return 1; 
     if (a.Cash> b.Cash) 
      return -1; 
     return 0; 
    }); 

Просто надо выбрать «Cash» свойство искомого объекта и сортировать его. Надеюсь, это поможет.

0

Для такого рода операций и может попытаться использовать библиотеку вот-тире. (http://lodash.com/docs)

Пожалуйста, проверьте документы для получения дополнительной информации. Функция SortBy должна решить вашу проблему Lo-Dash SortBy

0

Javascript не гарантирует заказ по объектам и поэтому сортировка объектов непосредственно здесь невозможна. Пожалуйста, обратитесь к this answer, чтобы лучше понять причину и соответствующую документацию. В вашем случае я бы воссоздал список пар key-value с key как атрибут cash вашего объекта, а затем отсортировал этот массив, напрямую изменяя функцию sort.

Предполагая, что ваш первоначальный массив объектов называется list1, вы могли бы сделать:

For simplicity: 
list2 = []; 
for (i=0;i<list1.length;i++){ list2.push({'key': list1[i].price.cash,'val' : list1[i]});} 

//list2 would be populated as : 
list2 = [{key:44499, val: Object},..]; 

//To sort the list2 based on ascending order of cash 

list2 = list2.sort(function (a, b) { 
     return a.key - b.key; 
}); 


//In your case,you could accomplish this directly as well doing just : 
list1.sort(function (a, b) { 
    return a.cash.price- b.cash.price; 
}); 

Здесь я перезаписаны функция sort немного заботиться о порядке. A relevant SO question о том, как функция сортировки работает в javascript, может быть полезной.

Смежные вопросы