7週目に挑戦を振り返る


1.要求


7週目のタスクは関数の完了です

2.改善すべき点


1) Javascript


1️⃣ for ... in文は、コンストラクション関数のプロトタイプにリストされる可能性のあるすべての属性をリストするため、防御コードが必要です.
  _.each = function (collection, iterator) {
    if (Array.isArray(collection)) {
      for (let i = 0; i < collection.length; i++) {
        iterator(collection[i], i, collection);
      }

      return;
    }

    for (let key in collection) {
      iterator(collection[key], key, collection);
    }
以下を参照してください.
hasOwnProperty
for...in hasOwnProperty
2πフィルタを使っても解けますので、チャレンジしてみましょう!
  _.reject = function (collection, test) {
    const answer = [];

    _.each(collection, function (item) {
      if (!test(item)) answer.push(item);
    });

    return answer;
  };
➡️
    return _.filter(collection, function (item) {
      return !test(item);
    });
3𗞚𔣤reduceはよく再利用されています.
ただし、reduceを使用するとすべての配列を巡回する必要はありませんので、falseyvalueが真ん中にある場合は、すぐにfalseで車に戻る方法で作成します.
すべての配列は不要な回転を行う必要がないので、時間の複雑さを少し改善することができます.
  _.every = function (collection, iterator) {
    // TIP: Try re-using reduce() here.
    if (iterator === undefined) iterator = _.identity;

    return _.reduce(
      collection,
      function (memo, item) {
        if (memo) {
          return memo = iterator(item) ? true : false;
        }
        return false;
      },
      true
    );
➡️
    if (iterator === undefined) iterator = _.identity;

    const defaultValue = true;

    for (let i = 0; i < collection.length; i++) {
      if (!iterator(collection[i])) return false;
    }

    return defaultValue;
4則は実パラメトリックでアクセスできますが、拡張演算子を使うと矢印関数でも実パラメトリックにアクセスできるので、高速演算子をよく使います.
   _.extend = function (obj) {
➡️  _.extend = function (...args) {

3.メンターの評価


こんにちはJin権!
あなたは本当に問題を解くのが上手で、コメントすることはありません.😅
memoize部分も週末にしっかり仕上げておけばよかった!
memorizeは1回の計算値が2回求められないことを目的とする関数である.
値がパラメータに基づいて計算された場合、関数は以前に計算された値を返し、時間複雑度を空間複雑度に置き換えます.
Closerさん、Memoというキーワードでこの問題を解決してほしいです.
一週間お疲れ様でした来週も珍権のハーモニーを楽しみにしていますがんばれ!🎉