如何在javascript中从数组中获得最多重复值

如何在javascript中从数组中获得最多重复值,javascript,jquery,arrays,Javascript,Jquery,Arrays,如何从javascript中的数组中获取重复次数最多的值 这是我的阵列 var data = [ { values: "Number of pips" }, { values: 4 }, { values: 4 }, { values: 4 }, { values: 5 }, { values: 2 }, { values: 6 }, { values: 6 }, { values: 5 } ]; 结果应该是

如何从javascript中的数组中获取重复次数最多的值

这是我的阵列

var data = [
    { values: "Number of pips" }, 
    { values: 4 }, 
    { values: 4 }, 
    { values: 4 }, 
    { values: 5 }, 
    { values: 2 }, 
    { values: 6 }, 
    { values: 6 },
    { values: 5 }
];
结果应该是
4
,我怎样才能得到这个

我试过这个,是从

功能模式(阵列)
{
如果(array.length==0)
返回null;
var modeMap={};
var maxEl=array[0],maxCount=1;
对于(var i=0;imaxCount)
{
maxEl=el;
maxCount=模式映射[el];
}
}
返回最大值;
}
但这是return
6,而不是4

  • 对数组进行排序。(我假设您可以这样做……否则先在另一个阵列上复制它)
  • 迭代数组,并通过保留先前访问的项来解决此问题
  • 对数组进行排序。(我假设您可以这样做……否则先在另一个阵列上复制它)
  • 迭代数组,并通过保留先前访问的项来解决此问题
  • 我知道了

    var arr= [{ values: "Number of pips" }, { values: 4 }, { values: 4 }, { values: 4 }, { values: 5 }, { values: 2 }, { values: 6 }, { values: 6 }, { values: 5 }];
    
    
    
        var uniqs = {};
    
        for(var i = 0; i < arr.length; i++) {
            uniqs[arr[i].values] = (uniqs[arr[i].values] || 0) + 1;
        }
    
        var max = { val: arr[0], count: 1 };
        for(var u in uniqs) {
            if(max.count < uniqs[u]) { max = { val: u, count: uniqs[u] }; }
        }
    
        alert(max.val);
    
    var arr=[{values:Number of pip},{values:4},{values:4},{values:5},{values:2},{values:6},{values:6},{values:5}];
    var uniqs={};
    对于(变量i=0;i
    我知道了

    var arr= [{ values: "Number of pips" }, { values: 4 }, { values: 4 }, { values: 4 }, { values: 5 }, { values: 2 }, { values: 6 }, { values: 6 }, { values: 5 }];
    
    
    
        var uniqs = {};
    
        for(var i = 0; i < arr.length; i++) {
            uniqs[arr[i].values] = (uniqs[arr[i].values] || 0) + 1;
        }
    
        var max = { val: arr[0], count: 1 };
        for(var u in uniqs) {
            if(max.count < uniqs[u]) { max = { val: u, count: uniqs[u] }; }
        }
    
        alert(max.val);
    
    var arr=[{values:Number of pip},{values:4},{values:4},{values:5},{values:2},{values:6},{values:6},{values:5}];
    var uniqs={};
    对于(变量i=0;i

    您尝试的代码的问题是您没有数字数组,而是有对象数组。如果要计算最多的
    值,则必须使用该值,而不是整个对象

    对于您尝试的代码,您只需更改以下行:

    var el = array[i].values;
    
    以下是完整的代码:

    function mode(array)
    {
        if(array.length == 0)
            return null;
        var modeMap = {};
        var maxEl = array[0], maxCount = 1;
        for(var i = 0; i < array.length; i++)
        {
            var el = array[i].values;// This is the change.
            if(modeMap[el] == null)
                modeMap[el] = 1;
            else
                modeMap[el]++;  
            if(modeMap[el] > maxCount)
            {
                maxEl = el;
                maxCount = modeMap[el];
            }
        }
        return maxEl;
    }
    
    功能模式(阵列)
    {
    如果(array.length==0)
    返回null;
    var modeMap={};
    var maxEl=array[0],maxCount=1;
    对于(var i=0;imaxCount)
    {
    maxEl=el;
    maxCount=模式映射[el];
    }
    }
    返回最大值;
    }
    

    您尝试的代码的问题是您没有数字数组,而是有对象数组。如果要计算最多的
    值,则必须使用该值,而不是整个对象

    对于您尝试的代码,您只需更改以下行:

    var el = array[i].values;
    
    以下是完整的代码:

    function mode(array)
    {
        if(array.length == 0)
            return null;
        var modeMap = {};
        var maxEl = array[0], maxCount = 1;
        for(var i = 0; i < array.length; i++)
        {
            var el = array[i].values;// This is the change.
            if(modeMap[el] == null)
                modeMap[el] = 1;
            else
                modeMap[el]++;  
            if(modeMap[el] > maxCount)
            {
                maxEl = el;
                maxCount = modeMap[el];
            }
        }
        return maxEl;
    }
    
    功能模式(阵列)
    {
    如果(array.length==0)
    返回null;
    var modeMap={};
    var maxEl=array[0],maxCount=1;
    对于(var i=0;imaxCount)
    {
    maxEl=el;
    maxCount=模式映射[el];
    }
    }
    返回最大值;
    }
    

    我不相信你尝试过任何事情……你自己尝试过任何事情吗?检查此项我不相信你尝试过任何事情……你自己尝试过任何事情吗?检查此项首先,当人们没有试图自己解决问题时,不要鼓励他们问问题。其次,你的答案并没有提供解决方案。说真的,你认为告诉OP“解决这个问题”有帮助吗?我认为这作为一个评论会更好,然后OP可以尝试编写你的代码recommendations@musefan我不同意你的“当人们没有试图解决问题时,不要鼓励他们提问”,我同意我的回答可以是一个评论。贬低我只是nasty@Zo72当前位置但也有人在提问时没有表现出任何解决问题的企图,这是在指南中。最低要求是至少包含当前代码。。。不管怎样,这不是你被否决的原因。我投了反对票,因为你的答案并不能解决这个问题,它只是一个关于如何解决这个问题的建议problem@musefan对于这个粗略的问题(至少在我回答的时候),我给出了一个粗略的解决方案。如何计算数组中的重复项?对数组进行排序,然后遍历。。。我认为这是公平的。。。无论如何,你有权否决我,所以我接受这一点:首先,当人们没有试图自己解决问题时,不要鼓励他们提问。其次,你的答案并没有提供解决方案。说真的,你认为告诉OP“解决这个问题”有帮助吗?我认为这作为一个评论会更好,然后OP可以尝试编写你的代码recommendations@musefan我不同意你的“当人们没有试图解决问题时,不要鼓励他们提问”,我同意我的回答可以是一个评论。贬低我只是nasty@Zo72当前位置但也有人在提问时没有表现出任何解决问题的企图,这是在指南中。最低要求是至少包含当前代码。。。不管怎样,这不是你被否决的原因。我投了反对票,因为你的回答没有提供问题的解决方案,只是一个如何解决问题的建议