如何使用For循环生成一个字典数组

时间:2014-10-14 18:14:01

标签: javascript arrays dictionary

我正在生成我的字典数组的方式是非常硬连接的,我宁愿不这样做。 Top 3不一定有3个项目,我出于其他原因使用了该名称。例如,如果我知道除了搜索字词之外Top 3将包含两个项目,它将如下所示:

                var top3Titles = [];
                var top3Prices = [];
                var top3ImgURLS = [];
                var top3ItemURLS = [];

                //where the title, price, and img url are sent over to the app
                matchCenterItems.forEach(function(item) {
                  var title = item.title[0];
                  var price = item.sellingStatus[0].convertedCurrentPrice[0].__value__;
                  var imgURL = item.galleryURL[0];
                  var itemURL = item.viewItemURL[0];

                  top3Titles.push(title);
                  top3Prices.push(price);
                  top3ImgURLS.push(imgURL);
                  top3ItemURLS.push(itemURL);
                });

                // 10 results per MC Item, only showing 4 by default
                 var top3 = 
                {
                  "Top 3": 
                  [
                      {
                         "Search Term": searchTerm
                      },

                      { 
                        "Title": top3Titles[0], 
                        "Price": top3Prices[0], 
                        "Image URL": top3ImgURLS[0],
                        "Item URL": top3ItemURLS[0]
                      },

                      {
                         "Title": top3Titles[1], 
                        "Price": top3Prices[1], 
                        "Image URL": top3ImgURLS[1],
                        "Item URL": top3ItemURLS[1] 
                      },
                  ]
                }; 

                return top3;

我想要做的是让初始Search Term之后的字典数量取决于item数组中有多少matchCenterItems个对象。我想我可以使用for循环来做到这一点,但我不完全确定如何为此目的格式化它。不是为标题,价格等设置单独的数组,而是希望它是一个具有title属性的对象。

2 个答案:

答案 0 :(得分:2)

您可以初始化top3内的数组,并在迭代一个或多个数组(top3Titles,top3Prices等)时添加对象。

像这样:

var top3 = {'Top 3': [{'Search Term': searchTerm}]};

for (var i in top3Titles) {
  top3['Top 3'].push({
    'Title': top3Titles[i], 
    'Price': top3Prices[i], 
    'Image URL': top3ImgURLS[i],
    'Item URL': top3ItemURLS[i]
  });
}

或者,更好的是,您可以替换您发布的所有内容:

var top3 = {'Top 3': [{'Search Term': searchTerm}]};

matchCenterItems.forEach(function(item) {

top3['Top 3'].push(
  {
    'Title': item.title[0],
    'Price': item.sellingStatus[0].convertedCurrentPrice[0].__value__, 
    'Image URL': item.galleryURL[0],
    'Item URL':  item.viewItemURL[0]
  });
});

return top3;

但重点在于,return属于一个函数,正如我在你对你的问题的评论中告诉你的那样。

答案 1 :(得分:1)

我没有很好的JavaScript练习,但我可以给你演示如何使用for循环生成dict数组

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var arr=[];
var i;
var text="";
for(i=0;i<10;i++){
    <!-- Creating 10 dictionary in array and initialise with some->
    <!--value to check->
   arr.push({firstName : "John"}) 
}

<!-- check that dict is working or not->
for(i=0;i<10;i++){
text=text+arr[i].firstName+'<br />'
}
document.getElementById("demo").innerHTML =
text;

</script>

</body>
</html>

你可以运行并检查它..