过滤和排序 JavaScript 数组

Jam*_*mes 7 javascript arrays sorting

我有一个这样的数组:

[{
    "number": "4",
    "fileName": "fileXX",
    "rating": {
        "average": 6.4
    }
}, {
    "number": "3",
    "fileName": "fileXX",
    "rating": {
        "average": 5.4
    }
}, {
    "number": "4",
    "fileName": "fileXX",
    "rating": {
        "average": 5.4
    }
}]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下条件创建一个新数组:

  1. 获得array.rating.average每个数字 ( array.number) 的最高评分( )

输出应该是:

[{
    "number": "4",
    "fileName": "fileXX",
    "rating": {
        "average": 6.4
    }
}, {
    "number": "3",
    "fileName": "fileXX",
    "rating": {
        "average": 5.4
    }
}
}]
Run Code Online (Sandbox Code Playgroud)

我刚刚设法按最高评分排序:

array.sort(function(a , b) {
    return a.rating.average - b.rating.average;
});
array.reverse();
Run Code Online (Sandbox Code Playgroud)

但是,现在,我只想要每个副本一个对象array.number,保留具有最高array.rating.average.

Hai*_* Ai 11

array.sort((a, b) => {
  if(a.number === b.number) {
    // If two elements have same number, then the one who has larger rating.average wins
    return b.rating.average - a.rating.average;
  } else {
    // If two elements have different number, then the one who has larger number wins
    return b.number - a.number;
  }
});


array = array.filter((element, index) => {
  return index === 0 || element.number !== array[index-1].number;
});
Run Code Online (Sandbox Code Playgroud)

对于您的测试用例,

[{
  "number": "4",
  "fileName": "fileXX",
  "rating": {
    "average": 6.4
  }
}, {
  "number": "3",
  "fileName": "fileXX",
  "rating": {
    "average": 5.4
  }
}, {
  "number": "4",
  "fileName": "fileXX",
  "rating": {
    "average": 5.4
  }
}]
Run Code Online (Sandbox Code Playgroud)

排序后,输出将是

[{
  "number": "4",
  "fileName": "fileXX",
  "rating": {
    "average": 6.4
  }
}, {
  "number": "4",
  "fileName": "fileXX",
  "rating": {
    "average": 5.4
  }
}, {
  "number": "3",
  "fileName": "fileXX",
  "rating": {
    "average": 5.4
  }
}]
Run Code Online (Sandbox Code Playgroud)

过滤后,最终结果:

[{
  "number": "4",
  "fileName": "fileXX",
  "rating": {
    "average": 6.4
  }
}, {
  "number": "3",
  "fileName": "fileXX",
  "rating": {
    "average": 5.4
  }
}]
Run Code Online (Sandbox Code Playgroud)