【问题标题】:Get Fruits with Highest value in object获取对象中价值最高的水果
【发布时间】:2015-05-11 13:45:29
【问题描述】:

让我知道如何在此事件中为我的变量 Result 获取最高值,例如: if MyFruits ={ "Orange": 1, "Banana": 3, "Apple": 3 }

我想得到"Banana""Apple" 但它只给了我第一个水果:"Banana"

 // first the variable MyFruits must have index 0
 // and after the user clicks to give value.
 var MyFruits = {
     "Orange": 0,
     "Banana": 0,
     "Apple": 0
 };
 $('input:checked').each(function(index) {
     var key = $(this).val();
     if (key in MyFruits) {
         MyFruits[key]++;
     } else {
         MyFruits[key] = 1;
     }
 });
 var Result = Object.keys(MyFruits).reduce(function(a, b) {
     return MyFruits[a] > MyFruits[b] ? a : b
 });

【问题讨论】:

  • 你所有的水果都有相同的索引 0
  • 然后你应该创建一个包含所有答案的数组
  • 首先,我的变量“MyFruits”需要每个水果的索引 0。然后,当用户单击单选按钮时,索引会发生变化。
  • reduce 只会返回 1 个值

标签: javascript object


【解决方案1】:

翻转您的对象,使数字 1、3、3... 成为键,它们的值是相应水果的数组:

var MyFruits = { "Orange": 1, "Banana": 3, "Apple": 3 };
var FruitsValue = {};
var MaxValue = -1;
$.each(MyFruits, function(friut, value) {
    if (FruitsValue[value] === undefined) {
        FruitsValue[value] = [];
    }
    FruitsValue[value].push(friut)
    MaxValue = Math.max(MaxValue, value);
});
console.log(FruitsValue);
// {1: ["Orange"], 3:["Banana","Apple"]}
console.log(FruitsValue[MaxValue]);
// ["Banana", "Apple"]

【讨论】:

    【解决方案2】:

    如果元素相同,则需要保留它们。您可以为此使用临时数组。

    var MyFruits ={ "Orange": 1, "Banana": 3, "Apple": 3 };
                    $('input:checked').each(function(index) {
                        var key = $(this).val();
                        if (key in MyFruits) {
                            MyFruits[key]++;
                        } else {
                            MyFruits[key] = 1;
                        }
                    });
    
    
    var resultArray = [];
    var Result = Object.keys(MyFruits).reduce(function(a, b) {
                    if( MyFruits[a] == MyFruits[b] ) {
                        resultArray.push(b);
                        return a;  
                    }
    
                     var bigger = MyFruits[a] > MyFruits[b] ? a : b;
                     resultArray = [];
                     resultArray.push(bigger);
                     return bigger;
                })
    

    【讨论】:

      【解决方案3】:

      试试这个:

      var max = 0;
      var maxProp = null;
      for (var property in MyFruits) {
         if (max < MyFruits[property])
         {
            max = MyFruits[property];
            maxProp = property;
         }
      }
      

      【讨论】:

        【解决方案4】:

        认为你必须做两遍..

        var MyFruits ={ "Orange": 1, "Banana": 3, "Apple": 3 };
        var highest=0;
        var results = [];
        //pass 1 : find highest
        for (f in MyFruits)
        {
            if (MyFruits[f] > highest) { highest = MyFruits[f] ) }
        }
        
        // pass 2 : find all which match highest
        for (f in MyFruits[f]) {
          if (MyFruits[f] == highest) {results.push(MyFruits[f])}
        
        }
        

        array 'results' 以所有匹配最高值的数组结束

        【讨论】:

        • 这应该是 JavaScript 吗?
        • @FelixKling 抱歉,我一直在度假。把我的语言搞混了。希望现在更有意义。
        【解决方案5】:

        类似问题:How can I order the items in an Object?

        你可以像这样得到有序的结果集:

        var res = Object.keys(MyFruits).map(function(key ) {
          return { key: key, value : dict[key] };
        }).sort(function(a, b) { 
           return b.value - a.value
        });
        

        第一个索引 res[0] 具有格式最大的对象

          { key : "Banana", value : 3}
        

        而res[1]中第二高的等等...

        【讨论】:

          【解决方案6】:

          用户 .filter() 而不是 .reduce()

          示例如下:

          Object.keys(MyFruits).filter(function (a, b) {
              return MyFruits[a] > MyFruits[b] ? a : b;
          });
          

          否则,您的情况会很有效!快乐编码......!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-09-06
            • 1970-01-01
            • 2016-06-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多