簡體   English   中英

jQuery.parseJSON無序數組

[英]jQuery.parseJSON disordered array

初始PHP ARRAY將屬性存儲為值和鍵上的相應ID

Array
(
[979] => Pict Model
[962] => Brand
[494] => Dimensions
[980] => Capacity
[981] => Power
[982] => List Price
[983] => Warrenty
[975] => USB Connection
[976] => Self Cleaning
[977] => Double Glass Door
[978] => Steam Function
[974] => Electricity Type
)

在下面的代碼中, adorable_attr保存着json編碼的數組。 之后,作為我console.log(comparable_attr)這給了我一個順序為php數組的json。

然后,在我解析JSON然后console.log之后,它以不同的順序給了我數據。

var comparable_attr = '<?php echo json_encode($_comparable_attributes); ?>';
   if(comparable_attr.length != 0){       //check for empty json
      console.log(comparable_attr);
          var obj = jQuery.parseJSON(comparable_attr);
                console.log(obj);
}

問題:我想在解析parseJSON之后以相同的順序實現它。

獲得的結果:

第一個Console.log(comparable_attr)給出:

{"979":"Pict Model","962":"Brand","494":"Dimensions","980":"Capacity","981":"Power","982":"List Price","983":"Warrenty","975":"USB Connection","976":"Self Cleaning","977":"Double Glass Door","978":"Steam Function","974":"Electricity Type"}

第二個Console.log(obj)給出:

 Object { 494="Dimensions", 962="Brand", 974="Electricity Type", more...}

在此處輸入圖片說明

編輯

我發現的是,它根據我的屬性ID進行了短路,我需要按照與數組中相同的順序進行操作。

當將PHP備用數組轉換為JSON,然后轉換為JS變量時,您將獲得JS Object而不是數組,並且JS對象明確是一組無序的鍵值對。

如果您希望保留順序,則需要首先在PHP端重新排列數據,也許是:

Array(
    Array([979] => Pict Model),
    Array([962] => Brand),
    ...
)

但是請注意,如果這樣做,您將失去直接通過鍵查找數據的功能,因為生成的JS對象看起來像:

[
  { "979": "Pict Model" },  // NB: all JS keys are strings
  { "962": "Brand" },
  ...
]

另一種選擇是按原樣發送您現有的數組,但也發送僅是鍵的有序列表的第二個數組。 前者可用於基於鍵的查找,后者可確定正確的順序:

json_encode(array(
    'data' => $_comparable_attributes,
    'order' => array_keys($_comparable_attributes)
));

Javascript的json對象順序取決於填充。 您可以在console嘗試:

a = {2:'a', 1:'b'}
Object {1: "b", 2: "a"}

為了解決您的問題,建議您通過以下方式阻止自動排序:

array_reduce(
  $a, 
  function($carry, $item) use(&$a) { 
    $carry[] = [key($a), $item]; next($a); return $carry; 
  }, 
  []
)

這會將您的初始數組包裝到包含[key, val]項目的數組中。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM