2017-12-27 7 views
0

私は人々が投票することができ、投票が配列に格納される文字の配列を持っています。最高のupvoteとdownvoteの投票数の並べ替えとその逆の並べ替え

私は2つの新しい配列を作成しました。最初の配列を並べ替えて、upvoteとdownvoteの比が(upvotesからdownvotesを減算した後の)文字が配列の先頭にくるようにしてください。正反対です。

最初の配列の比較関数は、2:1のアップボトムと2:1のアップボトムの比率を持つEdwardがMagneticとGokuよりも先にある配列を返します.MagneticとGokuの両方とも1:0のアップボトムと間違っている。彼らは配列上のエドワードよりも早くなければなりません。

const characters = [ 
 
    { name: 'Sharpe', upvotes: 2, downvotes: 0 }, 
 
    { name: 'Edward', upvotes: 4, downvotes: 2 }, 
 
    { name: 'Magnetic', upvotes: 1, downvotes: 0 }, 
 
    { name: 'The', upvotes: 1, downvotes: 0 }, 
 
    { name: 'Goku', upvotes: 2, downvotes: 0 }, 
 
    { name: 'Zeros', upvotes: 1, downvotes: 1 } 
 
]; 
 

 
characters.sort((a, b) => { 
 
    return (b.upvotes - b.downvotes) - (a.upvotes - a.downvotes); 
 
}); 
 

 
console.log(characters);

+3

ちょうど種類のためのあなたの比較機能は、それら上記のコメントが言うことをやっていないようです。配列1の場合、下の票を減算しない '(b.upvotes - b.downvotes) - (a.upvotes - a.downvotes)' –

+0

あなたが上の票から票を減算するのを見ることはできません。上向きの票と下向きの票からのみ票を上げます。ソートされたロジックを確認してください。 – Dan

+1

@Peeperがなぜ[編集して元に戻す](https://stackoverflow.com/q/47974883/1541563)... –

答えて

1

あなたの比較関数は少しオフに見て:

(a, b) => { 
    return b.upvotes - a.downvotes 
} 

bのupvotesとaためdownvotesを比較して - あなたは、実際の比率を比較していませんaの比がbである。 a.upvotes - a.downvotesのようなもの(とbについても同様)と - -

あなたは別に両方abのための比率を計算する必要がありますし、それらを比較します。

const characters = [ 
 
    { name: 'Edward', upvotes: 21, downvotes: 30 }, 
 
    { name: 'Sharpe', upvotes: 37, downvotes: 200 }, 
 
    { name: 'And', upvotes: 45, downvotes: 3 }, 
 
    { name: 'The', upvotes: 0, downvotes: 0 }, 
 
    { name: 'Magnetic', upvotes: 1, downvotes: 0 }, 
 
    { name: 'Zeros', upvotes: 37, downvotes: 100 } 
 
]; 
 

 
characters.sort((a, b) => { 
 
    if (a.downvotes == 0 && b.downvotes == 0) { 
 
     return b.upvotes - a.upvotes; 
 
    } 
 
    else if (a.downvotes == 0 && a.upvotes > 0) { 
 
     return -1; 
 
    } 
 
    else if (b.downvotes == 0 && b.upvotes > 0) { 
 
     return 1; 
 
    } 
 
    return (b.upvotes - b.downvotes) - (a.upvotes - a.downvotes); 
 
}); 
 

 
console.log(characters);

+1

磁気は、downvotesに対するupvotesの比率が1:0であるため、 'And'より先にあるべきです。これを行う方法はありますか?私はあなたのソリューションで自分の質問を更新し、私が言及した欠陥を示す方法でコードスニペットを編集しました。これを把握してくれてありがとう。 – Peeper

+0

私の解決策を編集しました。今すぐ試してみてください。私はあなたが1 upvote、0 downvoteが2 upvotes、1 downvoteを超えるように何かをしたいと思った。また、0 up 0 downが1 upvote、2 downvotesのようなものの上にあると仮定します。私は本当にすばやくそれを取り上げたいと思って以来、それは非常にエレガントな解決策ではありませんが、うまくいけばそれは仕事をしています。 – elsyr

関連する問題