2016-05-08 3 views
1

ここで私は最高のcountのオブジェクトを識別するシステムを持っていますが、両方が最高のcountという2つのオブジェクトがあります。私ができるようにしたいのは、トップカウントを取ることですが、その多くは可能性がありますが、ランダムに出力することです。これどうやってするの?JavaScript - 多くのトップヒットをランダムに出力します

var objects = [ 
    {username: 'mark', count: 3}, 
    {username: 'dave', count: 5}, 
    {username: 'john', count: 5}, 
    {username: 'lucy', count: 2}, 
]; 

var res = objects.reduce(function(resObj, obj) { 
    return resObj.count > obj.count ? resObj : obj 
}) 

console.log(res); 

ありがとう!ここ

+0

このコードは、返される値を気にしない場合はうまく動作します。実際には、リストの最初のものだけでなく、実際にはランダムなものを望んでいますか? – telaviv

+0

True randomはい、私は毎回同じ答えを出力したくありません。 – mellows

答えて

3

ニースの質問は、あなたがそれを行うことができる方法である

:私は、これはあなたが持っているどのように多くの試合に関係なく、どのように動作するかをお見せするために、同じ数のいくつかのより多くを追加しました:

Working example

var objects = [ 
    {username: 'mark', count: 3}, 
    {username: 'dave', count: 5}, 
    {username: 'john', count: 5}, 
    {username: 'amy', count: 5}, 
    {username: 'adam', count: 5}, 
    {username: 'fenty', count: 5}, 
    {username: 'lucy', count: 2}, 
]; 
// make an array to push same counts 
var arr = []; 

var res = objects.reduce(function(resObj, obj) { 
    // keep track of (and set) max count 
    var max = Math.max(resObj.count, obj.count); 
    // if count is equal push to our array 
    if (max === obj.count) { 
    arr.push(obj); 
    } 
    // same code as before 
    return resObj.count >= obj.count ? resObj : obj; 
}); 

// get random index from our array 
var randIndex = Math.floor(Math.random() * arr.length); 

// get random result from our objects that have the same count: 
console.log(arr[randIndex]); 
1

ここでは単純なforループを使用した回答です。ランダムheightestオブジェクト

function getHighest(objects) { 
    var highest = 0; 
    var heighestArr = []; 
    // first get highest index 
    for(var i=1; i<objects .length;i++){ 
     if(objects[i].count > objects[highest].count){ 
       highest= i; 
     } 
    } 
    // then add all the highest ones in an array 
    for(var i=0; i<objects .length;i++){ 
     if(objects[i].count === objects[highest].count){ 
       heighestArr.push(objects[i]) 
     } 
    } 
    // return random from that array 
    return heighestArr[Math.floor(Math.random()*heighestArr.length)]; 
} 
0
var objects = [ 
    {username: 'mark', count: 3}, 
    {username: 'dave', count: 5}, 
    {username: 'john', count: 5}, 
    {username: 'lucy', count: 2}, 
]; 

var res = objects.slice(1).reduce(function(resObj, obj) { 
    if (resObj[0].count > obj.count) { 
    return resObj; 
    } else if (resObj[0].count === obj.count) { 
    return [...resObj, obj]; 
    } else { 
    return [obj] 
    } 
}, [objects[0]]) 

var randomElement = function(arr) { 
    return arr[Math.floor(Math.random() * arr.length)]; 
} 

console.log(randomElement(res)); 

未テストを返しますが、これは基本的な考え方です。

関連する問題