gpt4 book ai didi

javascript - Google Chrome : JavaScript associative arrays, 乱序评估

转载 作者:数据小太阳 更新时间:2023-10-29 04:24:14 25 4
gpt4 key购买 nike

好的,所以在网页上,我有一个 JavaScript 对象,我将其用作关联数组。当页面加载时,它静态地存在于脚本 block 中:

var salesWeeks = {
"200911" : ["11 / 2009", "Fiscal 2009"],
"200910" : ["10 / 2009", "Fiscal 2009"],
"200909" : ["09 / 2009", "Fiscal 2009"],
"200908" : ["08 / 2009", "Fiscal 2009"],
"200907" : ["07 / 2009", "Fiscal 2009"],
"200906" : ["06 / 2009", "Fiscal 2009"],
"200905" : ["05 / 2009", "Fiscal 2009"],
"200904" : ["04 / 2009", "Fiscal 2009"],
"200903" : ["03 / 2009", "Fiscal 2009"],
"200902" : ["02 / 2009", "Fiscal 2009"],
"200901" : ["01 / 2009", "Fiscal 2009"],
"200852" : ["52 / 2008", "Fiscal 2009"],
"200851" : ["51 / 2008", "Fiscal 2009"]
};

键/值对的顺序是有意安排的,因为我正在将对象变成一个 HTML 选择框,如下所示:

<select id="ddl_sw" name="ddl_sw">
<option value="">== SELECT WEEK ==</option>
<option value="200911">11 / 2009 (Fiscal 2009)</option>
<option value="200910">10 / 2009 (Fiscal 2009)</option>
<option value="200909">09 / 2009 (Fiscal 2009)</option>
<option value="200908">08 / 2009 (Fiscal 2009)</option>
<option value="200907">07 / 2009 (Fiscal 2009)</option>
<option value="200906">06 / 2009 (Fiscal 2009)</option>
<option value="200905">05 / 2009 (Fiscal 2009)</option>
<option value="200904">04 / 2009 (Fiscal 2009)</option>
<option value="200903">03 / 2009 (Fiscal 2009)</option>
<option value="200902">02 / 2009 (Fiscal 2009)</option>
<option value="200901">01 / 2009 (Fiscal 2009)</option>
<option value="200852">52 / 2008 (Fiscal 2009)</option>
<option value="200851">51 / 2008 (Fiscal 2009)</option>
</select>

...使用看起来像这样的代码(从函数中截取):

var arr = [];
arr.push(
"<select id=\"ddl_sw\" name=\"ddl_sw\">" +
"<option value=\"\">== SELECT WEEK ==</option>"
);

for(var key in salesWeeks)
{
arr.push(
"<option value=\"" + key + "\">" +
salesWeeks[key][0] + " (" + salesWeeks[key][1] + ")" +
"<\/option>"
);
}

arr.push("<\/select>");

return arr.join("");

这在 IE、FireFox 和 Opera 中都可以正常工作。

但是在 Chrome 中,顺序很奇怪:

<select id="ddl_sw" name="ddl_sw">
<option value="">== SELECT WEEK ==</option>
<option value="200852">52 / 2008 (Fiscal 2009)</option>
<option value="200908">08 / 2009 (Fiscal 2009)</option>
<option value="200906">06 / 2009 (Fiscal 2009)</option>
<option value="200902">02 / 2009 (Fiscal 2009)</option>
<option value="200907">07 / 2009 (Fiscal 2009)</option>
<option value="200904">04 / 2009 (Fiscal 2009)</option>
<option value="200909">09 / 2009 (Fiscal 2009)</option>
<option value="200903">03 / 2009 (Fiscal 2009)</option>
<option value="200905">05 / 2009 (Fiscal 2009)</option>
<option value="200901">01 / 2009 (Fiscal 2009)</option>
<option value="200910">10 / 2009 (Fiscal 2009)</option>
<option value="200911">11 / 2009 (Fiscal 2009)</option>
<option value="200851">51 / 2008 (Fiscal 2009)</option>
</select>

注意:这个顺序虽然很奇怪,但不会在后续刷新时改变。始终按此顺序。

那么,Chrome 在做什么?对它如何处理循环进行一些优化?

首先,我依赖键/值对在任何关联数组中声明的顺序是错误的吗?

我以前从未质疑过它,我只是假设顺序会保持不变,因为这种技术在其他浏览器中一直对我有效。但我想我从来没有在任何地方看到它说订单是有保证的。也许不是?

任何见解都会很棒。谢谢。

最佳答案

将关联数组想象成一个纸袋,所有键值对都放在里面。当您将手伸入麻袋中查看这些对时(例如使用 for...in 循环),您遇到它们的顺序出于所有实际目的都是随机的。

如果您想按特定顺序查看它们,您需要将键提取到一个数组中并对其进行排序。然后遍历数组,使用遇到的键索引到关联数组中。

关于javascript - Google Chrome : JavaScript associative arrays, 乱序评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com