簡體   English   中英

根據值對具有鍵值對的對象進行排序

[英]Sort object having key value pair based on values

我已經聲明了一個對象。

var obj = {“ 1”:“ google”,“ 2”:“ yahoo”,“ 3”:“ msn”,“ 4”:“ stackoverflow”,“ 5”:“ github”,“ 6”:“ jsfiddle “,” 7“:” amazon“,” 8“:” ebay“};

我需要根據值進行排序,然后將其推入數組,然后顯示該數組。 我已經根據值對對象進行了排序,並將其推入數組。 但是在顯示數組時,值是根據鍵排序的。 我發現了發生這種情況的原因,即,因為鍵是數字,所以在推入數組或對象時,默認情況下會根據鍵對值進行排序。 我不想更改鍵中存在的值。 請讓我知道,有什么替代方法可以克服嗎?

在此先感謝Chandan

使用這個你轉換為數組

var arr =  $.map(obj, function(el) { return el });

比您只需要根據要求排序

好吧,談到排序我想指出的是,您實際上只能在JS中對數組進行排序。 我的意思是您也可以對對象進行“排序”,但是在這種情況下,以后遍歷對象時不能保證順序。

另一方面,在對數組進行排序時,保留鍵是沒有意義的,因為如果這樣做,則值的最終順序將基於鍵,因此按值進行的排序變得毫無意義。

我將更改輸入的格式並對對象數組進行排序-它將允許您既保留鍵(和其他屬性,如果需要),並基於值建立順序。 所以,可以說,您的輸入是

 var arr = [{id: "10", country:"India"}, {id:"12", country:"Australia"}, {id:"17", country:"China"}]; for(var i = 1; i < arr.length; i++) { var temp = arr[i]; for(var j = i - 1; j >= 0 && temp['country'] < arr[j]['country']; j--) arr[j + 1] = arr[j]; arr[j + 1] = temp; } // or just use the default JS function: /*arr.sort(function(a, b) { return a.country > b.country; }); */ console.log(arr); 

為了說明我在開始時所說的話:這將根據需要對對象進行排序,但最終順序將不被保留:

 var obj = {"10":"India", "12": "Australia","17":"China"}, sorted = {}; // or [] var arr = []; // array of countries // sorting countries for(var key in obj) arr.push(obj[key]); arr.sort(); // creating a data structure "sorted" in a "sorted" order for(var i = 0; i < arr.length; i++) { for(var key in obj) if(obj[key] == arr[i]) { console.log(arr[i]); // seems it kind of writes it in the right order - Aus, Chi, Ind... sorted[key] = arr[i]; } } console.log(sorted); // ...but outputs differently (I use Chrome) 

Object.keys(obj).reduce((arr,key)=>(arr[key]=obj[key],arr),[]);

只需創建一個稀疏數組?

創建此:

[undefined, "google", "yahoo", "msn", "stackoverflow", "github", "jsfiddle", "amazon", "ebay"]

或者您只是用它來制作一個數組,執行以下操作:

Object.setPrototypeOf(obj,Array.prototype);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM