根据值

时间:2017-05-17 14:08:23

标签: javascript jquery arrays sorting javascript-objects

我宣布了一个对象。

var obj = {     “1”:“google”,     “2”:“雅虎”,     “3”:“msn”,     “4”:“stackoverflow”,     “5”:“github”,     “6”:“jsfiddle”,     “7”:“亚马逊”,     “8”:“ebay” };

我需要根据值进行排序,然后将其推送到数组,我需要显示数组。 我已根据值对对象进行了排序并将其推送到数组中。但是在显示数组时,值会根据键进行排序。 我发现了它发生的原因,即因为键是数字,在推送到数组或对象时,默认情况下会根据键对值进行排序。我不想更改键中的值。请让我知道它可以解决这个问题吗?

先谢谢, CHANDAN

3 个答案:

答案 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;
&#13;
&#13;

为了说明我在开头说的话:这会根据你的需要对对象进行排序,但不会保留最终的顺序:

&#13;
&#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;
&#13;
&#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);