为什么javascript会对从服务器获取的数据进行重新排序

为什么javascript会对从服务器获取的数据进行重新排序,javascript,jquery,Javascript,Jquery,我正在使用jquery ajax从服务器获取一些数据,并以以下格式获取它们: 然而,当我用javascript打印这些数据时,它会按id升序打印,而不是像我收到的数据那样降序打印 当我在这里打印它时,它就是它的外观: 它以字母和数字的升序对所有事物进行自我排序,为什么要这样做 这是我的密码: $.ajax("{{route("backend.blog.categories.getparents")}}", { method: 'GET',

我正在使用jquery ajax从服务器获取一些数据,并以以下格式获取它们:

然而,当我用javascript打印这些数据时,它会按id升序打印,而不是像我收到的数据那样降序打印

当我在这里打印它时,它就是它的外观:

它以字母和数字的升序对所有事物进行自我排序,为什么要这样做

这是我的密码:

        $.ajax("{{route("backend.blog.categories.getparents")}}", {
            method: 'GET',
            dataType:'json',
            success: function(result) {
                console.log("result.categories: " + result.categories);
我使用这些数据来填充一个选择框,我需要它的顺序与我接收它的顺序相同,而不是由javascript自动排序。我该怎么做

$.each( result.categories, function( key, value ) {
    console.log("key: " + key);
    if(key != exclude){
        parentCategories += '<option value=' + key + '>' + value + '</option>';
    }
});

JSON——您正在使用的符号——没有顺序。如果您想给它一个特定的顺序,您必须显式地保存它或使用数组。不管是哪种方式,尽管根据规范,顺序是不能保证的,但现代浏览器通常都会遵守顺序。然而,看起来像数字的键形成了一个奇怪的异常,你现在发现了

let orderkeeped={“a2”:“a”,“a1”:“b”};
让OrderNotKeeped={“2”:“a”,“1”:“b”};

log(orderkeep,ordernotkeep)如果您想要保证顺序,那么普通对象是错误的。您需要的是数组而不是普通对象。对象键没有保证的顺序。你能解释一下数组的含义吗?我以为我是在发送一个数组,我用服务器端代码更新了我的问题,在那里我显示我发回了一个数组还是我被误用了?PHP(从上一个代码片段中假设)将“数组”(通过索引访问的有序元素)和“关联数组”(通过命名键访问的值)合并到
array()
。另一方面,JavaScript将它们分为不同的类型—
Array
Object
?我如何将json数据发送回javascript,使其显示为数组?您需要保留
值,还是只需要保留值的顺序?实际上是每个函数都会通过它们并按升序打印它们。我能做些什么呢?JSON与此无关,它只是数据的字符串表示。问题是,当使用for in或Object.keys时,对象键没有保证迭代顺序,其中$。每个都可能用于对象。如您所述,解决方案是使用正确的对象作为数组。如果在服务器端使用一个数组,那么在客户端序列化时,它将保持正确的顺序。您能详细解释一下数组的含义吗?我以为我在发送一个数组,我用服务器端代码更新了我的问题,在这里我显示我发回了一个数组,还是我被误用了?@ste2425因为我知道JS在大多数(如果不是全部的话)JavaScript实现中都保存了顺序,所以我认为信息在解析过程中丢失了。相反,javascript实现(而不是规范)在保持非数字字符串顺序的同时对数字字符串进行排序。@ste2425它是一种格式。尽管JSON规范没有直接提到它,但该规范显然是基于JS对象的,并且从您从PHP到JSON字符串的那一刻起,顺序信息就不再得到保证(根据JSON规范,解析器是允许的,但不必保存顺序)。
$parentCategories = array();

foreach ($categories as $category) {
    $parentCategories += [$category->id => $category->title];
}

if($categories){
    return response()->json([
        'status' => 'success',
        'categories' => $parentCategories,