Порядок элементов массива, отправляемых в ответе сервера AJAX, кажется измененным при обходе на стороне клиента

Я получил следующий ответ JSON со стороны моего сервера —

echo json_encode(array("result"=>"success", "networks" => $adNetworkListFinal));

Где, на примере, $ adNetworkListFinal имеет следующее значение —

Array
(
[-3] => Native Test
[143] => conf native template
[142] => test native
)

Примечание — индекс -3 является первым. Да, это отрицательный целочисленный индекс, который я должен использовать здесь.

Но на стороне клиента, когда я пересекаю ответ с помощью .each (), я получаю элемент с индексом -3 наконец —

Код

$.ajax({
type: "POST",
url: posturl,
data : data,
dataType: "json",
async: false,
success: function(msg){if (msg.result == "success")
{
$.each(msg.networks,function(key,val)
{
console.log("check "+key);
});

}
});

Выход

check 142

check 143

check -3

Я не уверен, что вызывает изменение в порядке (элемент с индексом -3, наконец, становится доступным) и как это исправить.

0

Решение

Массивы не могут иметь отрицательные индексы, поэтому вы создаете объект JSON (и, следовательно, объект JavaScript).

JSON и JavaScript объекты неупорядоченный так что вы возвращаете свойства в любом порядке, в котором движок JS хранит их.

Поскольку значения являются числовыми, вы можете вытянуть их в массив (как значения, а не как индексы) и отсортировать их, прежде чем использовать их для доступа к значениям исходного объекта.

2

Другие решения

Других решений пока нет …