2012-01-15 64 views
2

我有三個類似的json對象。現在我想加入整個列表,然後根據其中一個索引對完整列表進行排序。這裏,回到原來的對象描述添加兩個json對象並排序

對象1

[{"link":"#","prod":"Fundamentals Of Software Engineering","price":" Rs. 200 "},{"link":"##","prod":"Real-Time Systems: Theory And Practice","price":" Rs. 394 "}] 

對象2

[{"link":"#","prod":"Fundamentals Of Software Engineering","price":" Rs. 200 "},{"link":"##","prod":"Real-Time Systems: Theory And Practice","price":" Rs. 394 "}] 

對象3

[{"link":"#","prod":"Fundamentals Of Software Engineering","price":" Rs. 200 "},{"link":"##","prod":"Real-Time Systems: Theory And Practice","price":" Rs. 394 "}] 

有一次,我加入他們所有的人,我想將整個數組(新的)w.r.t排序到價格指數。

任何暗示這將不勝感激。 謝謝:)

+0

三個對象不會有相同的數據 – 2012-01-15 10:50:38

+1

你卡在哪裏? [如何解析JSON](http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript),[如何連接數組](http://stackoverflow.com/questions/5080028 /什麼是最有效的方式連接n數組在JavaScript中),[如何排序對象數組](http://stackoverflow.com/questions/1129216/sorting- object-in-an-array-by-a-field-value-in-javascript/1129270#1129270)還是別的? – 2012-01-15 10:53:22

+0

我無法連接它們 – 2012-01-15 10:53:53

回答

2

如果Object1, Object2和Object3是JSON字符串,使用eval函數將其轉換爲Javascript對象。

然後使用concat方法合併它們。 http://www.w3schools.com/jsref/jsref_concat_array.asp

var mergedArray = arr1.concat(arr2, arr3); 

然後排序使用JavaScript數組sort方法。 REF:http://www.w3schools.com/jsref/jsref_sort.asp REF:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

var sorted = mergedArray.sort(function(a, b){ 

    // This function is used by sort method for sorting process 
    // This function gets called with parameters a,b which are the elements in array (here product objects from your JSON) 
    // if this function returns value < 0 a is placed before b 
    // if this function returns 0 nothing is changed 
    // if this function returns value > 0 b is placed before a 
    // a.price.replace("Rs.", "") removes Rs. from price string. so "Rs. 200" becomes 200 
    // parseFloat(a.price.replace("Rs.", "")) makes it number. "200" becomes 200. "200.50" becomes 200.5 
    // priceA - priceB returns -ve value if priceA < priceB, 0 if priceA = priceB, +ve value if priceA > priceB. 

    var priceA = parseFloat(a.price.replace("Rs.", "")); 
    var priceB = parseFloat(b.price.replace("Rs.", "")); 
    return priceA - priceB; 



}); 

使用return priceB - priceA;的降序排列。 jsfiddle:http://jsfiddle.net/diode/FzzHz/

+0

你能解釋一下最後一部分嗎?合併數組後,我沒有得到這個代碼如何排序它們。請解釋一下 – 2012-01-15 11:39:57

+0

我已經用解釋更新了答案。請檢查。 – Diode 2012-01-15 12:00:58

+0

非常感謝。我得到了一切:D – 2012-01-15 16:56:09

1

將它們轉換爲對象,並this應該做的伎倆

1

你可以使用concat方法來連接的陣列:

var result = arr1.concat(arr2, arr3); 

,然後你可以得到的數組進行排序。

讓我們編寫的排序功能,將使用prod特性對它們進行排序(你可以用任何你想要的屬性對它們進行排序):

function SortByProd(a, b) { 
    var aProd = a.prod.toLowerCase(); 
    var bProd = b.prod.toLowerCase(); 
    return ((aProd < bProd) ? -1 : ((aProd > bProd) ? 1 : 0)); 
} 

,然後排序:

result.sort(SortByProd); 
+0

如果他使用jQuery ... – 2012-01-15 10:57:08

+0

@FelixKling,oops,正確。固定。 – 2012-01-15 10:59:51