モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

javascriptで重複チェックとソート

「grape,apple,orange」のように、カンマ区切りで入力された内容を重複チェックするために、ハッシュにいれることで行いました。
例えばこんな感じです。

  input = "grape,apple,orange,apple";

  var results = {};
  var inputs = input.split(",");
  for (var i = 0; i < inputs.length; i++) {
    results[inputs[i]] = true;
  }

  for (var result in results) {
    console.log(result);
  }
grape
apple
orange


この結果をソートしたいという要望が出たため、ハッシュ results をソートしようとして results.sort() としたのですが、出来ないのですね。
あれ?出来なかったっけ?と思ったんですが、javascriptだと出来ない感じ… perlなら出来るのに。


というわけで、一度配列に突っ込み直してソートしました。

  input = "grape,apple,orange,apple";

  var results = {};
  var inputs = input.split(",");
  for (var i = 0; i < inputs.length; i++) {
    results[inputs[i]] = true;
  }

  var resultsArray = [];
  for (var result in results) {
    resultsArray.push(result);
  }
  resultsArray.sort();

  for (var i = 0; i < resultsArray.length; i++) {
    console.log(resultsArray[i]);
  }
apple
grape
orange

なんかひと手間感ありますね。


これってもっと良い方法あるのかな?
こうするといいよってのありましたら教えてください。


(追記)

@kotyさんから

input.split(',').reduce(function(prev,curr){if(prev.indexOf(curr)===-1)prev.push(curr); return prev;}, []).sort();


通りすがりさんから、ES6ならば

[...new Set(input.split(','))].sort();


といただきました。
関数型の威力をみせつけられましたねえ…