[英]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.