如何在javascript中创建关联数组

时间:2014-11-20 07:10:40

标签: javascript arrays

我需要以下列格式创建数组:

{"3":
    {"label":"All i want for christmas",
     "song":"Alliw_1405399165.mp3",
     "name":"All i want for christmas"},
"4":
    {"label":"Call your girlfriend robyn clip",
     "song":"Gangnam_Style_2.m4a",
     "name":"Call your girlfriend robyn},
"5":
    {"label":"Gangnam style psy clip",
     "song":"Samba_De_Janeiro-world_cup_for_jivebird.m4a",
     "name":"Gangnam style psy clip"} }

我按照以下方式在ajax响应后填充这些值:

$.each(response.result, function(i,item){

                        label = item.name;
                        if((item.special_price < item.price)&&(item.special_price!=0) && (item.special_price!=null)) {
                            label += '- is Only '+ item.special_price + item.currencysymbol;
                        }

                        tmpsongList[item.product_id].push({'label': label,
                                                    'song': item.audiofile,
                                                    'name': item.name,
                                                    'tag': item.tag,
                                                    'song_path': item.audio_url});

                });

但这导致以下错误未捕获的TypeError:无法读取未定义的属性'push'

我如何创建这样的数组。请帮我解决这个问题 感谢所有

2 个答案:

答案 0 :(得分:1)

push是数组上的一个方法(不是普通对象),它将传递给它的值放到数组的末尾。

您没有尝试在对象的末尾添加值,而是尝试将其分配给特定的索引。

tmpsongList[item.product_id] = { ...

答案 1 :(得分:0)

它不是一个数组,它是一个地图/对象。 var a = {}是一个对象/地图。 var a = []是一个数组。 在你的情况下,你需要

tmpsongList[item.product_id] = {'label': label,
                                                'song': item.audiofile,
                                                'name': item.name,
                                                'tag': item.tag,
                                                'song_path': item.audio_url};