можно ли запретить автоматическую сортировку числовых свойств объекта JS?
Нельзя.Но вы все равно не должны обращать внимания на порядок свойств в объектах JavaScript или заботиться о них.Хотя у них есть заказ (сейчас), лучше всего действовать так, как будто они неупорядочены.Если вам нужен конкретный порядок, используйте массив (который также является объектом, и это часть того, почему имена свойств, которые являются целочисленными индексами, посещаются в числовом порядке).
Проблема в том, чтоЯ не контролирую конструкцию var stk;потому что он построен внутри кода PHP из стороннего плагина.
Если это так, вы ничего не можете с этим поделать.Если бы вы могли заставить PHP выводить его в виде строки , например:
var stk = "{3:{221:1,220:1,224:1,226:1,198:1},24:{221:1,220:1,224:1,226:1,198:1},33:{198:1},9:{223:1,221:1,220:1,224:1,226:1,198:1},156:{220:1,224:1,226:1}}";
..., вы могли бы разобрать его самостоятельно и поддерживать порядок.Но если вы даже не можете этого сделать, вы ничего не можете с этим поделать.
Вы можете наклониться назад и найти его в тексте JavaScript, если это встроенный тег script
а не файл .js
(если это файл .js
, ваша способность читать его будет зависеть от того, имеет ли он тот же источник, что и ваша страница).
Например:
var text = $("#from-plugin").text();
var match = /var stk=(\{.*\};)/.exec(text);
console.log(match ? match[1] : "Couldn't find it");
<script id="from-plugin">
// other stuff
var stk={3:{221:1,220:1,224:1,226:1,198:1},24:{221:1,220:1,224:1,226:1,198:1},33:{198:1},9:{223:1,221:1,220:1,224:1,226:1,198:1},156:{220:1,224:1,226:1}};
// other stuff
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
... и тогда вам нужно будет разобрать его в массив массивов.Вероятно, не особенно сложно, в этом случае.