对简单的 JSON 对象进行排序 [重复]

Posted

技术标签:

【中文标题】对简单的 JSON 对象进行排序 [重复]【英文标题】:Sorting simple JSON object [duplicate] 【发布时间】:2012-01-04 21:08:32 【问题描述】:

可能重复:Sorting javascript Object by property value

由于我注意到浏览器无法保证通过 ajax 调用 (reference) 对 JSON 元素进行排序,因此在 ajax 调用之后使用 javascript 对 JSON 元素进行排序时遇到了一些麻烦。

我找到了一些关于这个问题的主题,但是没有一个明确的解决方案来解决我的 JSON 对象的简单结构。我刚得到一个包含大量数据的段。 我知道有很多关于此的主题,即使在 *** 上也是如此,但没有一个主题可以处理这种简单的 json 结构。

例如:


   "158":"Banana",
   "265":"Pear",
   "358":"Apple",
   "864":"Peach"

如何根据水果名称而不是 id 对这个对象进行排序? 我想把这个对象放在最后:


   "358":"Apple",
   "158":"Banana",
   "864":"Peach"
   "265":"Pear",

提前致谢。

【问题讨论】:

见:***.com/questions/8175093/… underscore.js 有一个不错的sortBy() 函数:documentcloud.github.com/underscore/#sortBy 对象没有任何特定的顺序。如果您希望它们按顺序排列,请改用(对象)数组。 那不是 JSON 对象。 JSON 是一种字符串表示法。你解析 JSON字符串一个object literal. 【参考方案1】:
var kk = 
   "158":"Banana",
   "265":"Pear",
   "358":"Apple",
   "864":"Peach"


var keys = [];
var datas = 

$.each(kk, function(key, value)

  keys.push(value)
  datas[value] = key;

)
    var aa = keys.sort()

        var sorted =

$.each(aa, function(index, value)

    sorted[datas[value]] = value;
)

【讨论】:

恰恰相反。我想对不在 id 上的名称进行排序,但我正在尝试使用您的代码示例的解决方案。 对于每一个你用来创建排序对象,都可以用来解决一个问题。但请记住这一点 '对象没有任何特定的顺序。如果您希望它们按顺序排列,请改用(对象)数组'。感谢您的宝贵时间。【参考方案2】:
var someObject = 
   "158":"Banana",
   "265":"Pear",
   "358":"Apple",
   "864":"Peach"
;

//flip the name/value pairs
Object.prototype["reverseObject"] = function() 
    var name;
    var newObject = ;
    for(name in this) 
        if(typeof this[name] !== 'function') 
           newObject[this[name]] = name;
        
    
    return newObject;


var reversedObject = someObject.reverseObject();

console.log(reversedObject);

var i;
var properties = [];
//get all the property names
$.each(reversedObject, function(key, value) 
    if(reversedObject[key] !== this)
    properties.push(key);
);

properties.sort();

var sortedObject = [];

//iterate the array using the order specified
for(i = 0; i < properties.length; i += 1) 
    sortedObject[properties[i]] = reversedObject[properties[i]];
    //document.writeln(properties[i] + " : " + reversedObject[properties[i]]);


var sortedObject = sortedObject.reverseObject();

console.log(sortedObject);

Fiddle

这将创建一个按字母顺序排列的属性名称数组。然后,该数组用于索引对象。这会产生您请求的确切对象。

【讨论】:

以上是关于对简单的 JSON 对象进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

对简单对象进行排序[重复]

在 Flutter 中对 JSON 列表进行排序 [重复]

node.js - 按值对 JSON 对象进行排序 [重复]

对 JSON 进行排序或按原始顺序获取 JSON [重复]

周日,周一,...,周六等工作日的排序对象[重复]

JavaScript按属性值对字典进行排序[重复]