JavaScriptでkey:valueを扱う方法
習慣沉默
習慣沉默 2017-05-19 10:43:49
0
2
669

最近、ホテルの評価システムのロジックである値のペア (ここでの値 value は複数の行を参照できます) に従って key:value の配列を並べ替える必要があるアルゴリズムの問​​題に遭遇しました。
Name Hygiene User Experience Security
A x1 y1 z1
B x2 y2 z2
... ... ... ...
上記と同様に、まず、衛生状態を並べ替えた後、衛生状態ランキングから上位 3 人を選択します。以前に選択した上位 3 人を選択します。ユーザー エクスペリエンスに基づいて並べ替えます。ユーザー エクスペリエンスに基づいて上位 2 人を選択します。セキュリティに基づいて並べ替えます。セキュリティを選択します。場所。
最後に1位を出力します。
実際に似ているような気がするのですが、情報や地図機能を確認したのですがやり方がよく分からないのでアドバイスをお願いします。 (追伸: 自分のアルゴリズムは明らかに悪くないと感じていますが、少し複雑なアルゴリズムに遭遇するたびに混乱してしまいます。フロントエンドのピットに入って間もなく、基本的な JS 関連のコードを一読しました。) 、疑問を解決してください。

習慣沉默
習慣沉默

全員に返信(2)
小葫芦

首先你这个是题目还是项目? 如果是真实项目,你可以用上 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)这个函数也是很方便的。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!