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

可能重复:
Sorting JavaScript Object by property value

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

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

例如:

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

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

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

提前致谢。

【问题讨论】:

标签: javascript jquery json


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2018-02-18
    • 1970-01-01
    • 2017-06-07
    • 2018-02-13
    • 1970-01-01
    • 2014-07-09
    • 2011-12-31
    相关资源
    最近更新 更多