2

私は現在、コードウォーズの以下の質問をjavascriptで解決しようとしています。以下が質問です。

「文字列 a1 と a2 の 2 つの配列が与えられると、a2 の文字列の部分文字列である a1 の文字列の辞書順でソートされた配列 r が返されます。」

以下は、この質問のために私が書いたコードです。

function inArray(array1,array2){
  var result = [];
  var newResult = [];

  for(var i = 0; i < array2.length; i++) {
    for(var j = 0; j < array1.length; j++) {
      if(array2[i].includes(array1[j])) {
        result.push(array1[j])
      }
    }
  }

  for(var k = 0; k < result.length; k++) {
    if(result[k] !== result[k+1]) {
      newResult.push(result[k]);
    }
  }

  return newResult.sort();
}

以下は、合格する必要があるテストの例です。

a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
a1 = ["xyz", "live", "strong"]
Test.assertSimilar(inArray(a1, a2), ["live", "strong"])
a1 = ["live", "strong", "arp"]
Test.assertSimilar(inArray(a1, a2), ["arp", "live", "strong"])
a1 = ["tarp", "mice", "bull"]
Test.assertSimilar(inArray(a1, a2), [])

私のコードはすべてのサンプル テストに合格しているように見えますが、すべての仕様に合格することはできません。10 個の仕様のうち 5 個の仕様に失敗していると書かれています。なぜ私がそれらの仕様に失敗しているのかわかりません。私のコードに問題がありますか、それともコードを改善する方法はありますか?

4

4 に答える 4

0

for ループを変更し ( のarray1代わりに , で開始array2)、アイテムが見つかった場合に内側のループをスキップするためのラベルを使用することをお勧めします。

この方法では、重複の結果をフィルタリングする必要はありません。

function inArray(array1, array2) {
    var i, j, result = [];

    outer: for (j = 0; j < array1.length; j++) {
        for (i = 0; i < array2.length; i++) {
            if (array2[i].includes(array1[j])) {
                result.push(array1[j]);
                continue outer;
            }
        }
    }
    return result.sort();
}

var Test = {
    assertSimilar: function (a, b) {
        console.log('result', a);
        console.log('given', b);
    }
};

a2 = ["lively", "alive", "harp", "sharp", "armstrong"];
a1 = ["xyz", "live", "strong"];
Test.assertSimilar(inArray(a1, a2), ["live", "strong"]);
a1 = ["live", "strong", "arp"];
Test.assertSimilar(inArray(a1, a2), ["arp", "live", "strong"]);
a1 = ["tarp", "mice", "bull"];
Test.assertSimilar(inArray(a1, a2), []);
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2016-11-22T17:36:48.120 に答える