자바스크립트에서 키:값을 처리하는 방법
習慣沉默
習慣沉默 2017-05-19 10:43:49
0
2
733

최근 호텔 평가 시스템의 논리인 값 쌍(여기서의 값은 여러 행을 참조할 수 있음)을 기반으로 키:값 배열을 정렬해야 하는 알고리즘 질문을 접했습니다.
이름 위생 사용자 경험 보안
A 위생 측면에서 상위 3위 중에서 이전에 선택한 상위 3개를 선택하고, 사용자 경험을 기준으로 정렬하고, 사용자 경험을 기준으로 상위 2개를 선택하고, 보안을 기준으로 정렬한 후 첫 번째를 선택합니다. 보안 조건.
드디어 1위를 출력합니다.
실제로 비슷한 것 같은데, 정보와 지도 기능을 확인해 봤는데, 어떻게 해야 할지 아직 잘 모르겠습니다. 조언 부탁드립니다. (ps: 분명히 제 알고리즘이 나쁘지 않다는 느낌이 들지만, 조금 더 복잡한 알고리즘을 만날 때마다 헷갈립니다. 프론트엔드 피트에 들어간 지 얼마 지나지 않아 기본 js 관련 코드를 다 짚어봤습니다.) , 의심을 해결하도록 도와주세요.

習慣沉默
習慣沉默

모든 응답 (2)
漂亮男人

으아악

    小葫芦

    일단 이게 주제인가요 아니면 프로젝트인가요? 실제 프로젝트인 경우lodashsortBy를 사용하여 목록의 개체를 정렬할 수 있습니다.lodashsortBy对列表中的对象进行排序。

    假设你的酒店列表模型简化为:

    const list = [ { name: 'foo', a: 3, b: 5, c: 7 }, // 这个是酒店模型,a, b, c就是各个因素的打分 ... ]

    现在需求是把list中的对象先按a排序,再按b排序,再按c排序。 实现起来就是:

    let result = _.sortBy(list, o = > o.a); // 先按a排序 result = _.sortBy(list, o => o.b); // 再按b排序 result = _.sortBy(list, o => o.c); // 最后按C排序

    如果分数是越大越好,那么应该是逆序

    let result = _.sortBy(list, o = > -o.a); // 先按a逆序排序 result = _.sortBy(list, o => -o.b); // 再按b逆序排序 result = _.sortBy(list, o => -o.c); // 再按c逆序排序

    像题中所说的,要取出3,2, 1名,那么不需要每次都对全部结果排。

    let result = _.sortBy(list, o = > -o.a).slice(3); // 排好序取三个 result = _.sortBy(list, o => -o.b).slice(2); result = _.sortBy(list, o => -o.c).slice(1); result[0] // 第一名

    如果是面试题,还需要完成sortBy这个函数, 可以简单利用Array#sort实现:

    function sortBy(list, iterator) { return list.slice(0).sort(function(left, right) { left = iterator(left); right = iterator(right); return left < right ? -1 : 1; }); }

    要注意的是:sortBy要实现成稳定排序, 即两个分数一致的对象,排序前后相对位置要保持不变。
    当然直接使用上Array#sort(func)

    호텔 목록 모델이 다음과 같이 단순화되었다고 가정해 보겠습니다. ## 으아악 ##현재 요구 사항은 목록의 개체를 먼저 a, b, c 순으로 정렬하는 것입니다. 이를 구현하는 방법은 다음과 같습니다. ## 으아악 ##점수가 클수록 좋다면 역순으로 해야겠죠## 으아악 ##질문에서 언급했듯이 3, 2, 1을 꺼내고 싶다면 매번 모든 결과를 정렬할 필요는 없습니다. ## 으아악 ## 면접 질문인 경우 sortBy기능도 완료해야 합니다. 간단히 Array#sort를 사용하여 구현할 수 있습니다. ## 으아악 ## sortBy안정적인 정렬로 구현되어야 한다는 점에 유의해야 합니다. 즉, 동일한 점수를 가진 두 개체의 상대적 위치는 전후에 변경되지 않고 유지되어야 합니다. 정렬.
    물론 Array#sort(func)함수를 직접 사용하는 것도 매우 편리합니다. ##
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!