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



给定以下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代码中。

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

我可以阻止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 的文本中找到它(如果它是一个.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>

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

最新更新