我正在创建一个投票系统,我有以下对象:
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' (没有特别的顺序)。
答案 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];
});
新变量会将“获胜者”列为数组。