按最高投票比率对投票数进行排序,反之亦然

时间:2017-12-27 00:16:09

标签: javascript arrays node.js sorting ecmascript-6

我有一系列人物可以投票的角色,投票会存储在数组中。

我从中制作了两个新阵列,我想对第一个阵列进行排序,以便具有最佳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);

1 个答案:

答案 0 :(得分:1)

您的比较功能看起来有点偏差:

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

a的downvotes与b的upvotes进行比较 - 您实际上并未比较a 的 b的比率

您必须分别计算ab的比率 - 例如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);