我环顾四周,但似乎没有什么是我正在寻找的。我试图弄清楚你是否可以拥有一个也保留顺序的哈希表,但同时也可以通过键名(而不是索引号)来访问这些值。
假设我有一个哈希表:
var productsSelected = {
cpu: "Core i7 2.4GHz",
memory: "8GB",
videoCard: "nVidia 6500-GTS",
display: "27-inch LCD",
extraBattery: "",
antivirus: "",
mouse: "Logitech 232",
extendedWarranty: ""
}
我想使用Handlebars遍历此对象,并显示在订单确认页面中选择的产品列表。
订单确认清单中显示的产品需要按特定顺序排列。我不希望防病毒显示在列表的顶部,然后是CPU,例如。我希望它是CPU内存 - 视频卡等...
我考虑在键名中添加数字:
var productsSelected = {
a100-cpu: "Core i7 2.4GHz",
a110-memory: "8GB",
a120-videoCard: "nVidia 6500-GTS",
.
.
但这是一种非常愚蠢的方法。
还有
var productsSelectedArray = [
{cpu: "Core i7 2.4GHz"},
{memory: "8GB"},
{videoCard: "nVidia 6500-GTS"},
{display: "27-inch LCD"},
{extraBattery: ""},
{antivirus: ""},
{mouse: "Logitech 232"},
{extendedWarranty: ""}
]
但那可以愚蠢地走过 - 也许吧?我如何循环它但只显示键名,例如?
理想情况下,保留顺序的哈希表适用于所有浏览器(我认为不同的浏览器会以不同的方式处理哈希表顺序),并且可以通过键(也可能通过索引)访问值,例如< / p>
productsSelected.memory
返回&#34; 8GB&#34;
productsSelected[1].value
也会返回&#34; 8GB&#34;
productsSelected[1].key
可能会返回&#34;记忆&#34;
或类似的东西。
答案 0 :(得分:3)
持久化顺序的地图也称为链接散列图。 这是一个链接,显示如何在javascript中构建一个:
http://dailyjs.com/2012/09/24/linkedhashmap/
如果您正在寻找使用javascript构建的解决方案,我认为它不存在。每个浏览器在遍历对象时都有自己的实现。
答案 1 :(得分:1)
为什么你不能只在数组中指定键,然后只是使用数组来按顺序访问属性?
var keys = ['cpu', 'memory', 'videoCard'];
for (var i = 0, l = keys.length; i < l; i++) {
console.log(productsSelected[keys[i]]);
};
如果需要,您甚至可以将键作为对象的属性。
for (var i = 0, l = productsSelected.keys.length; i < l; i++) {
console.log(productsSelected[productsSelected.keys[i]]);
};
答案 2 :(得分:0)
在考虑更多之后 - 使用Underscore也无法做到这一点?
所有哈希都按照一定的顺序排列:
productsSelectedArray = [
{cpu: "Core i7 2.4GHz"},
{memory: "8GB"},
{videoCard: "nVidia 6500-GTS"},
{display: "27-inch LCD"},
{extraBattery: ""},
{antivirus: ""},
{mouse: "Logitech 232"},
{extendedWarranty: ""}
];
为了按顺序显示所有按键,我们可以使用下划线:
for (var i = 0, l = productsSelectedArray.length; i < l; i++) {
console.log( _.keys(productsSelectedArray[i]) );
};
然后按顺序显示所有值,我们也可以使用Underscore。
for (var i = 0, l = productsSelectedArray.length; i < l; i++) {
console.log( _.values(productsSelectedArray[i]) );
};