为什么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;
}
答案 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的优秀答案为基础。
您可以通过执行以下操作来避免设置和变更变量a
和winner
:
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
}, [])