Javascript 计算出一系列对象中最受欢迎的和最不受欢迎的

Javascript 计算出一系列对象中最受欢迎的和最不受欢迎的,javascript,Javascript,我有一个对象数组-类似这样: [ {"name" : "blar", "percentageTotal" : "10", "mostPopular" : "false", "leastPopular" : "false"}, {"name" : "foo", "percentageTotal" : "40", "mostPopular" : "false", "leastPopular" : "false"}, {"name" : "bar", "percentageTotal"

我有一个对象数组-类似这样:

[
  {"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”属性的最佳方法是什么?

记录到目前为止发现的最高和最低percentageTotal以及相应的inicies后,迭代数组。然后更新记录标记处的项目。

一次通过最大/最小“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;
}
函数更新普及率(项){
//按总百分比查找最小/最大受欢迎程度。
var min=null,max=null,i;
对于(i=0;i最大值为pct)){
max={idx:i,pct:items[i].percentageTotal};
}
如果(!min | | |)(项目[i].百分比总计

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

您可以通过在第一个循环中将mostPopular/leastPopular设置为false来保存第二个过程。是否有任何理由将对象的流行度缓存在对象中,而您必须计算它?数组中的顺序是否足够?