在一系列对象中找出最流行和最不受欢迎的东西

时间:2011-03-29 09:04:27

标签: javascript

我有一个对象数组 - 如下所示:

[
  {"name" : "blar", "percentageTotal" : "10", "mostPopular" : "false", "leastPopular" : "false"}, 
  {"name" : "foo", "percentageTotal" : "40", "mostPopular" : "false", "leastPopular" : "false"}, 
  {"name" : "bar", "percentageTotal" : "50", "mostPopular" : "false", "leastPopular" : "false"}
]

根据“percentageTotal”属性迭代对象并更新“mostPopular”和“leastPopular”属性的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

在一个过程中,通过max / min“percentageTotal”将最多/最不受欢迎的属性设置为false,然后根据存储的索引设置最多/最不受欢迎的属性,找到最受欢迎项目和最不受欢迎项目的索引。

function updatePopularity(items) {
  // Find the min/max popularity by percentage total.
  var min=null, max=null, i;
  for (i=0; i<items.length; i++) {
    items[i].mostPopular = items[i].leastPopular = false;
    if (!max || (items[i].percentageTotal > max.pct)) {
      max = {idx:i, pct:items[i].percentageTotal};
    }
    if (!min || (items[i].percentageTotal < min.pct)) {
      min = {idx:i, pct:items[i].percentageTotal};
    }
  }
  // Set the most/least popular values.
  items[max[idx]].mostPopular = true;
  items[min[idx]].leastPopular = true;
}

此解决方案不要求名称是唯一的。您可以通过设置it=items[i]并使用它来获得性能提升。

答案 1 :(得分:1)

一旦记录到目前为止发现的最高和最低百分比总数以及相应的内容,迭代数组。然后更新记录的标记中的项目。