LoginSignup
0

More than 5 years have passed since last update.

[checkio] Common Words

Last updated at Posted at 2017-08-02

忙しくて放置気味だったけど、久しぶりに。
お題は引数として渡された2つの文字列から、両方に登場している単語をアルファベット順に直して返すというもの。

例)
"one, two, three", "two, four, three"
=> "three, two"

10分やと最初は思ったけど、なんやかんやのつまづきがあって、90分くらいかかった。悲しい

自分の回答

function commonWords(first, second) {

    //variables
    let answer = [];
    let answer2 = '';
    let s1 = first.split(",");
    let s2 = second.split(",");

    for (let i of s1) {
        for (let j of s2) {
            if (i === j) {
                answer.push(i);
            }
        }
    }
    answer.sort(function(a,b) {
        if( a < b ) return -1;
        if( a > b ) return 1;
        return 0;
    });
    answer2 = answer.join(',');
    console.log(answer2);
    return answer2;
}

無念である。なんなのだこれはどうすればいいのだ!
後々調べてわかったのは、sortは比較関数を渡さなかったら、辞書順にソートするデフォルトが備わってたらしい。

すごいかいとう

function commonWords(first, second) {
    return first.split(",").filter(x => second.split(",").includes(x)).sort().join(",");
}

そう、書きたかったのはこういうやつ・・・美しい。
なるほど、やってる処理はほぼ一緒だけど、filterのcallbackがミソぽい。

学び

sort(compareFunction)

  • 引数に比較関数を渡して並べ替えの処理内容を指定することができるが、指定しなければ数字は昇順、文字列は辞書順に並べ替えてくれる。

join(attr)

  • 配列の要素をattrで区切った文字列に連結する。省略すれば、カンマで区切る。

includes(attr[, fromIndex])

  • 配列に引数の要素が含まれているかを調べて真偽を返す。fromIndexで検索を開始する位置を指定できて、マイナスを渡せば最後からの検索になる。配列だけでなく、文字列のような要素に対しても使える。
let i = "one";
i.includes('one');     //true

let i = "onetwothree";
i.includes('one');     //true

反省

チェインの処理を今度書いてみる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0