给定以下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>
。然后,您必须将其解析为数组数组。在这种情况下,可能不是特别困难。