所以,我有一些城市的分数附在上面,就像这样:
let cityScores = { Milan: 1, Malta: 3, Palma: 5, Ibiza: 2, Porto: 1 };
我想要做的是获取一个数组,将得分最高的城市作为其第一项(在本例中为Palma),然后按照得分递减的顺序排列城市。

我对此进行了长时间的认真思考,并提出了解决方案。我只是想问问,那里没有更好的东西吗?一种有用的方法或其他可能会丢失的方法?
这是我的方法:

首先,我在对象中找到最大值。然后,我检查每个城市,并确保值最高的城市在数组的开头。
然后,我尝试使用.push()将得分最低的城市推到最后,但我做不到。当我仍在绕过这些城市时,我无法正确地推送“城市”,因为城市是随机的。我发现最好的方法是按照分数“记住”城市并将其存储在这些数组(secondaryCities,teriaryCities等)中,然后逐一推送。

let cityScores = { Milan: 1, Malta: 3, Palma: 5, Ibiza: 2, Porto: 1 };
let cityScoreKeys = Object.keys(cityScores);
let cityScoreValues = Object.values(cityScores);
let maxScore = Math.max(...cityScoreValues);
let arrangedCities = [];
let secondaryCities = [];
let tertiaryCities = [];
let quaternaryCities = [];
for (i = 0; i < cityScoreKeys.length; i++) {
  if (cityScores[cityScoreKeys[i]] == maxScore) {
    arrangedCities.unshift(cityScoreKeys[i]);
  } else if (cityScores[cityScoreKeys[i]] === maxScore - 1) {
    secondaryCities.push(cityScoreKeys[i]);
  } else if (cityScores[cityScoreKeys[i]] === maxScore - 2) {
    tertiaryCities.push(cityScoreKeys[i]);
  } else if (cityScores[cityScoreKeys[i]] === maxScore - 3) {
    quaternaryCities.push(cityScoreKeys[i]);
  }
}
let nonMaxCities = [secondaryCities, tertiaryCities, quaternaryCities];
for (i = 0; i < nonMaxCities.length; i++) {
  arrangedCities.push(...nonMaxCities[i]);
}

最佳答案

这是我的解决方案:



let cityScores = { Milan: 1, Malta: 3, Palma: 5, Ibiza: 2, Porto: 1 };

let obj = Object.keys(cityScores).map(function(key) {
  return {key, value: cityScores[key]};
});

let result = obj.sort((a,b) => b.value - a.value);

console.log(result);

07-24 09:18