최근 호텔 평가 시스템의 논리인 값 쌍(여기서의 값은 여러 행을 참조할 수 있음)을 기반으로 키:값 배열을 정렬해야 하는 알고리즘 질문을 접했습니다.
이름 위생 사용자 경험 보안
A 위생 측면에서 상위 3위 중에서 이전에 선택한 상위 3개를 선택하고, 사용자 경험을 기준으로 정렬하고, 사용자 경험을 기준으로 상위 2개를 선택하고, 보안을 기준으로 정렬한 후 첫 번째를 선택합니다. 보안 조건.
드디어 1위를 출력합니다.
실제로 비슷한 것 같은데, 정보와 지도 기능을 확인해 봤는데, 어떻게 해야 할지 아직 잘 모르겠습니다. 조언 부탁드립니다. (ps: 분명히 제 알고리즘이 나쁘지 않다는 느낌이 들지만, 조금 더 복잡한 알고리즘을 만날 때마다 헷갈립니다. 프론트엔드 피트에 들어간 지 얼마 지나지 않아 기본 js 관련 코드를 다 짚어봤습니다.) , 의심을 해결하도록 도와주세요.
高洛峰2017-05-19 10:45:49
일단 이게 주제인가요 아니면 프로젝트인가요? 실제 프로젝트인 경우 lodash
의 sortBy
를 사용하여 목록의 개체를 정렬할 수 있습니다. lodash
的 sortBy
对列表中的对象进行排序。
假设你的酒店列表模型简化为:
1 2 3 4 |
|
现在需求是把list中的对象先按a排序,再按b排序,再按c排序。 实现起来就是:
1 2 3 |
|
如果分数是越大越好,那么应该是逆序
1 2 3 |
|
像题中所说的,要取出3,2, 1名,那么不需要每次都对全部结果排。
1 2 3 4 |
|
如果是面试题,还需要完成sortBy
这个函数, 可以简单利用Array#sort
实现:
1 2 3 4 5 6 7 |
|
要注意的是:sortBy
要实现成稳定排序, 即两个分数一致的对象,排序前后相对位置要保持不变。
当然直接使用上Array#sort(func)
sortBy
기능도 완료해야 합니다. 간단히 Array#sort
를 사용하여 구현할 수 있습니다. #🎜🎜#
으아악
#🎜🎜#sortBy
는 안정적인 정렬로 구현되어야 한다는 점에 유의해야 합니다. 즉, 동일한 점수를 가진 두 개체의 상대적 위치는 전후에 변경되지 않고 유지되어야 합니다. 정렬. Array#sort(func)
함수를 직접 사용하는 것도 매우 편리합니다. #🎜🎜#