アルゴリズムを解く


#unpackGiftbox
ギフトボックス情報の配列と文字列を入力し、条件を満たすギフトがあるかどうかを返します.
注意事項
  • boolean戻りタイプ
  • 関数unpackGiftbox再帰関数として記述
  • 繰り返し文が使用可能(forwhile)
  • 入力配列は、関数呼び出し後も初期状態(不変)のまま
  • 空の配列または空の文字列を入力するとfalseを返す
  • I/O例
    const giftBox = ['macbook', 'mugcup', ['eyephone', 'postcard'], 'money'];
    
    let output = unpackGiftbox(giftBox, 'iphone');
    console.log(output); // --> false
    解答方法
  • 空アレイとして発表
  • forドアを回し、giftBoxの要素を巡回する
    2-1. giftBoxの要素がwishと同じ場合→return true
    2-2. giftBoxの要素が配列である場合→その要素を空の配列にマージする
  • 重複文を出す
  • アレイbinarr長が0より大きい場合→戻り関数
  • 以上の条件は適用されない→return false
  • function unpackGiftbox(giftBox, wish) { 
      
      if (giftBox.length === 0 || wish === '') {
        return false;
      }
      
      let binarr = [];
      for (let i = 0; i < giftBox.length; i++) {
        if (giftBox[i] === wish) {
          return true;
        } else if (Array.isArray(giftBox[i])) {
          binarr = binarr.concat(giftBox[i]);
        }
      }
    
      if (binarr.length > 0) {
        return unpackGiftbox(binarr, wish);
      }
    
      return false;
    }