Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中对json对象排序_Javascript_Json_Sorting - Fatal编程技术网

在javascript中对json对象排序

在javascript中对json对象排序,javascript,json,sorting,Javascript,Json,Sorting,例如,使用以下代码: var json = { "user1" : { "id" : 3 }, "user2" : { "id" : 6 }, "user3" : { "id" : 1 } } 如何将此json排序为这样- var json = { "user3" : { "id" : 1 }, "user1" : { "id" : 3

例如,使用以下代码:

var json = {
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    },
    "user3" : {
        "id" : 1
    }
}
如何将此json排序为这样-

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}
我用ID对用户进行了排序。。

我不知道如何在javascript中实现这一点。

首先,这不是JSON。它是一个JavaScript对象文本。JSON是数据的字符串表示,恰好与JavaScript语法非常相似

第二,你有一个对象。它们是未分类的。元素的顺序无法保证。如果您想要保证订单,则需要使用数组。这将要求您更改数据结构

一种选择可能是使您的数据如下所示:

var json = [{
    "name": "user1",
    "id": 3
}, {
    "name": "user2",
    "id": 6
}, {
    "name": "user3",
    "id": 1
}];
现在有了一个对象数组,我们可以对它进行排序

json.sort(function(a, b){
    return a.id - b.id;
});
生成的数组如下所示:

[{
    "name": "user3",
    "id" : 1
}, {
    "name": "user1",
    "id" : 3
}, {
    "name": "user2",
    "id" : 6
}];

在某些方面,您的问题似乎非常合理,但我仍然可能将其标记为
XY问题
。我猜最终的结果是,您希望以某种方式显示排序后的值?正如Bergi在评论中所说,您永远不能完全依赖Javascript对象(
{i_am:“an_object”}
)以任何特定顺序显示其属性

对于显示顺序,我可能建议您获取对象的每个键(即,
I\u am
),并将它们排序为有序数组。然后,在检索要显示的对象元素时使用该数组。伪代码:

var keys = [...]
var sortedKeys = [...]
for (var i = 0; i < sortedKeys.length; i++) {
  var key = sortedKeys[i];
  addObjectToTable(json[key]);
}
var-keys=[…]
var sortedKeys=[…]
对于(变量i=0;i
下面是一个简单的片段,它对Json的javascript表示进行排序

function isObject(v) {
    return '[object Object]' === Object.prototype.toString.call(v);
};

JSON.sort = function(o) {
if (Array.isArray(o)) {
        return o.sort().map(JSON.sort);
    } else if (isObject(o)) {
        return Object
            .keys(o)
        .sort()
            .reduce(function(a, k) {
                a[k] = JSON.sort(o[k]);

                return a;
            }, {});
    }

    return o;
}
它可以按如下方式使用:

JSON.sort({
    c: {
        c3: null,
        c1: undefined,
        c2: [3, 2, 1, 0],
    },
    a: 0,
    b: 'Fun'
});
这将产生:

{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}

准确的副本。请注意,您无法对它们进行排序;对象是无序的键值映射。这对我没有帮助。。我有不同的json..由于某种原因,我的json上没有答案..当然你需要调整它…你知道它是如何工作的吗?如果是这样,并且您在调整时遇到问题,那么请发布您的尝试。将JSON转换为数组,对数组进行排序,然后转换回JSON。应该可以,但如果你想这样做,也许你不需要使用JSON。@Sharkoffmirkwood:没有JSON,他有简单的对象文本。将其转换回一个对象将使排序无效,因此这样做没有意义虽然这很有趣,但它并没有直接解决所提出的问题。
{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}