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

최근 호텔 평가 시스템의 논리인 값 쌍(여기서의 값은 여러 행을 참조할 수 있음)을 기반으로 키:값 배열을 정렬해야 하는 알고리즘 질문을 접했습니다.
이름 위생 사용자 경험 보안
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 학습자의 빠른 성장을 도와주세요!