我可以阻止自动排序JS对象的数字属性吗?

时间:2018-05-24 12:43:41

标签: javascript jquery sorting

给出以下JS对象



selectedFolder




我想让它按照它所处的顺序返回。 的console.log(STK [24]);

应该返回: 221,220,224,226,198而不是 198,220,221,224,226

我想要tf.contrib.seq2seq.dynamic_docode

问题:这里的问题是我无法控制var stk的构造;因为它是在第三方插件的PHP代码中构建的。

有没有办法以与它们相同的顺序返回值。

1 个答案:

答案 0 :(得分:4)

  

我可以阻止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}}";

...然后你可以自己解析并保持秩序。但如果你不能做到这一点,你就无能为力。

如果它是内嵌script标记而不是.js文件(如果它是'),您可以向后弯曲并在JavaScript文本中找到它。 sa .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>
&#13;
&#13;
&#13;

...然后,您必须将其解析为数组数组。在这种情况下,可能不是特别困难。