我宣布了一个对象。
var obj = { “1”:“google”, “2”:“雅虎”, “3”:“msn”, “4”:“stackoverflow”, “5”:“github”, “6”:“jsfiddle”, “7”:“亚马逊”, “8”:“ebay” };
我需要根据值进行排序,然后将其推送到数组,我需要显示数组。 我已根据值对对象进行了排序并将其推送到数组中。但是在显示数组时,值会根据键进行排序。 我发现了它发生的原因,即因为键是数字,在推送到数组或对象时,默认情况下会根据键对值进行排序。我不想更改键中的值。请让我知道它可以解决这个问题吗?
先谢谢, CHANDAN
答案 0 :(得分:1)
使用此转换为数组
var arr = $.map(obj, function(el) { return el });
比你只需要根据要求排序
答案 1 :(得分:1)
好吧,谈论排序我想指出你实际上只能在JS中排序数组。我的意思是你可以"排序"也是一个对象,但在这种情况下,以后遍历对象时无法保证顺序。
另一方面,在对数组进行排序时,保留键是没有意义的,因为如果这样做,值的最终顺序将基于键,因此按值排序变得毫无意义。 / p>
我会更改输入的格式并对对象数组进行排序 - 它将允许您保留键(以及其他属性,如果需要)并根据值建立顺序。所以,比方说,你的输入是
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);
&#13;
为了说明我在开头说的话:这会根据你的需要对对象进行排序,但不会保留最终的顺序:
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)
&#13;
答案 2 :(得分:0)
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);