push()在reduce()中按预期工作

时间:2015-09-22 16:47:59

标签: javascript arrays reduce

为什么a.push(b) Array.reduce()? a=a.push(b)工作b,其中a是一个字符串,将 getHighestValuesInFrequency: function(frequency) { //Input:var frequency = {mats: 1,john: 3,johan: 2,jacob: 3}; //Output should become ['John','jacob'] var objKeys = Object.keys(frequency); var highestVal = objKeys.reduce((a,b)=> {highestVal = (frequency[b] > a)? frequency[b] : a; return highestVal;},0); var winner = objKeys.reduce((a,b)=> { a = (frequency[b] === highestVal)? a.push(b) : a; return a},[]); return winner; } 变为整数。?!

protected void AttachViewModels<TFragment>(BaseViewModel pageViewModel, BaseViewModel contentViewModel, int contentResourceID)
               where TFragment : MvxFragment
{
    // Set the ViewModel for the fragment
    var fragment = (TFragment)SupportFragmentManager.FindFragmentById (contentResourceID);
    fragment.ViewModel = contentViewModel;
}

5 个答案:

答案 0 :(得分:12)

由于push()返回数组的新长度,因此您将长度分配给a。而不是条件运算符,使用if语句。

var winner = objKeys.reduce((a, b) => {
    if (frequency[b] === highestVal?) {
        a.push(b);
    }
    return a;
}, []);

答案 1 :(得分:4)

push()返回新长度。您可以使用ES2015扩展语法:


var winner = objKeys.reduce((a, b)=> {
    a = (frequency[b] === highestVal)? [...a, b] : a;
    return a
}, []);

答案 2 :(得分:1)

请注意,您提供的此结构不够清晰

我会使用一个对象数组,每个对象都有一个名字和一个频率

var frequencies = [{name : "mats", frecuency : 1},
                   {name : "john", frecuency: 3},
                   {name : "johan", frecuency: 2},
                   {name : "jacob", frecuency: 3}];

然后你可以使用过滤操作和地图来获得你需要的东西

var max = Math.max.apply(Math, frequencies.map(function(o){return o.frecuency;}));
var maxElems = frequencies.filter(function(a){return a.frecuency == max}).map(function(a){return a.name;});

maxElems会为您提供frecuency

较高的人的姓名

答案 3 :(得分:1)

以@Alexander Moiseyev的优秀答案为基础。

您可以通过执行以下操作来避免设置和变更变量awinner

return objKeys.reduce((acc, val) =>
    frequency[val] === highestVal 
      ? [...acc, val] 
      : acc
,[])

注意:为清楚起见,我已在此reduce方法中明确声明了累加器和值。

答案 4 :(得分:0)

spread syntax 支持更短的方法:

const winner = objKeys.reduce((a, b) => {
  return frequency[b] === highestVal ? [...a, b] : a 
}, [])