返回最高值或相等的值javascript

时间:2016-02-09 16:14:06

标签: javascript arrays sorting object

我正在创建一个投票系统,我有以下对象:

var obj1 = { Mcds: 2, Pret: 2, kfc: 2, BK: 1 }

或(取决于投票)可能是:

var obj2 = { Mcds: 2, Pret: 2, BK: 3 }

我想要的是展示投票最多的餐厅或餐厅。

我可以使用以下代码使用obj2示例实现此目的:

var obj2Keys = Object.keys(obj2);

var mostVoted = obj2Keys.reduce(function(previousValue, currentValue){
    return obj2[previousValue] > obj2[currentValue] ? previousValue : currentValue;
}); // returns 'BK'

当我在obj1示例中使用上面的代码时,我得到了' kfc'我想要的是' kfc' '高级成衣' ' MCDS' (没有特别的顺序)。

2 个答案:

答案 0 :(得分:1)

您需要将所有获胜名称累积到一个数组中。当您获得高票数的平局时,您将元素添加到数组中;当你获得更高的投票时,你就会开始一个新阵列。

var obj1 = {
  Mcds: 2,
  Pret: 2,
  kfc: 2,
  BK: 1
}

var high_vote = 0;
var winners;
for (var key in obj1) {
  if (obj1.hasOwnProperty(key)) {
    if (obj1[key] > high_vote) {
      winners = [key];
      high_vote = obj1[key];
    } else if (obj1[key] == high_vote) {
      winners.push(key);
    }
  }
}

alert(winners);

答案 1 :(得分:0)

在现有代码下面添加:

var mostVotedArray = obj2Keys.filter(function(currentValue){
    return obj2[currentValue] == obj2[mostVoted];
});

新变量会将“获胜者”列为数组。