【发布时间】:2013-08-11 17:04:49
【问题描述】:
我一直在寻找解决问题的方法,但似乎找不到任何答案……所以我不确定这是否可能。
我有一个带有产品信息的 javascript 对象,所以它看起来是这样的(请注意,它已经按照我想要的方式排序):
var prodType = {
'7' : {'prodname' : 'Abel','prodtype' : 'Book', 'prodprice' : '49.00'},
'212' : {'prodname' : 'Carl','prodtype' : 'Book', 'prodprice' : '49.00'},
'211' : {'prodname' : 'Devon','prodtype' : 'Book', 'prodprice' : '49.00'},
'2' : {'prodname' : 'Sarah','prodtype' : 'Book', 'prodprice' : '49.00'},
'10' : {'prodname' : 'Walter','prodtype' : 'Book', 'prodprice' : '49.00'}
}
然后我循环遍历它为某个插件创建一个表,下面是我如何获取信息的示例:
for(var val in prodType) {
console.log('pid: '+val
+ ' pname: '+prodType[val].prodname
+ ' pcategory: '+prodType[val].prodtype
+ ' pprice: '+prodType[val].prodprice);
}
我的问题是:我需要按产品名称排序打印,但保持 id 原样 - 就像我提供它一样,因为我正在使用 ID 进行进一步的数据库处理。所以,现在它打印:
pid: 2 pname: Sarah pcategory: Book pprice: 49.00
pid: 7 pname: Abel pcategory: Book pprice: 49.00
pid: 10 pname: Walter pcategory: Book pprice: 49.00
pid: 211 pname: Devon pcategory: Book pprice: 49.00
pid: 212 pname: Carl pcategory: Book pprice: 49.00
而我需要它看起来像这样:
pid: 7 pname: Abel pcategory: Book pprice: 49.00
pid: 212 pname: Carl pcategory: Book pprice: 49.00
pid: 211 pname: Devon pcategory: Book pprice: 49.00
pid: 2 pname: Sarah pcategory: Book pprice: 49.00
pid: 10 pname: Walter pcategory: Book pprice: 49.00
有可能吗?如果是这样,怎么做?非常感谢!
更新
我尝试了@go-oleg 解决方案,结果发现它不适用于我的情况:(这是我的真实数据示例:
var prodType = {
'211' : {'prodname' : '601A - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '49.00'},
'212' : {'prodname' : '601B - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '49.00'},
'214' : {'prodname' : '601C - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '49.00'},
'224' : {'prodname' : '614A - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '0.00'},
'225' : {'prodname' : '614C - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '0.00'},
'231' : {'prodname' : '614D - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '0.00'},
'226' : {'prodname' : '702B - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '49.00'},
'227' : {'prodname' : '702C - Blahblah','prodtype' : 'CD-ROM', 'prodprice' : '49.00'},
'217' : {'prodname' : 'COLL2 - Blahblah','prodtype' : 'Manual', 'prodprice' : '49.00'},
'16' : {'prodname' : 'COLV - Blahblah','prodtype' : 'DVD', 'prodprice' : '100.00'},
'119' : {'prodname' : 'UM - Blahblah','prodtype' : 'Manual', 'prodprice' : '29.00'},
'235' : {'prodname' : 'WDS - Blahblah','prodtype' : 'Manual', 'prodprice' : '49.00'},
'208' : {'prodname' : 'WTPO1 - Blahblah','prodtype' : 'Manual', 'prodprice' : '49.00'},
'195' : {'prodname' : 'WTPO2 - Blahblah','prodtype' : 'Manual', 'prodprice' : '49.00'}
}
【问题讨论】:
-
也许将这些项目复制到一个数组中,然后对其进行排序?
-
讨厌把这个告诉你,但它是一个对象。就 ECMA-262 而言,它根本没有被订购;甚至它已排序的事实也是特定于实现的细节。如果您想要排序,请使用数组(无论是保存键列表还是对象本身)并对其进行排序。
-
查看此处讨论的跨浏览器问题(是的,这是
delete操作员页面,但请阅读该部分)developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript object for-loop foreach