「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();
といただきました。
関数型の威力をみせつけられましたねえ…