我有一系列人物可以投票的角色,投票会存储在数组中。
我从中制作了两个新阵列,我想对第一个阵列进行排序,以便具有最佳upvote到downvote比率的字符(在从upvotes减去downvotes之后)位于数组的前面,第二个应该是完全相反。
我对第一个数组的比较函数返回一个数组,其中爱德华,比率为2:1的赞成票数低于磁力和悟空,两者的比率为1:0,投票给downvotes,这是不正确的;他们应该领先于阵中的爱德华。
const request = require('request-promise');
request.post('http://...', {
formData: {
// data here
}
}).then(response => {
// request.body is application/json
console.log(response.body); // {"bucket":"name-of-my-bucket","prefix":"cb012af0-ac7a-414b-b474-a9c71cbec811/"}
const data = JSON.parse(response.body);
}).catch(console.error);
答案 0 :(得分:1)
您的比较功能看起来有点偏差:
(a, b) => {
return b.upvotes - a.downvotes
}
将a
的downvotes与b
的upvotes进行比较 - 您实际上并未比较a 的与 b的比率
您必须分别计算a
和b
的比率 - 例如a.upvotes - a.downvotes
(和b
类似) - 然后进行比较。
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);