я могу предотвратить автоматическую сортировку числового свойства JS Object? - PullRequest
0 голосов
/ 24 мая 2018

Учитывая следующий объект JS

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}};

console.log(stk[24]);

Я хочу, чтобы это возвращалось в том порядке, в котором оно находится. Например, console.log (stk [24]);

должно возвращать: 221,220,224,226,198 вместо198,220,221,224,226

Я хочу предотвратить автоматическую сортировку числового свойства этого объекта .

Проблема: Проблема здесь в том, что я не могу контролировать построение var stk;потому что он построен внутри кода PHP от стороннего плагина.

Есть ли способ вернуть значения в том же порядке, в каком они есть.

1 Ответ

0 голосов
/ 24 мая 2018

можно ли запретить автоматическую сортировку числовых свойств объекта 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>

... и тогда вам нужно будет разобрать его в массив массивов.Вероятно, не особенно сложно, в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...