Javascript Функция прототипа / класса, которая проверяет объект на соответствие данных, возвращающих неопределенные - PullRequest
0 голосов
/ 05 августа 2020

Я выполняю задание по кодированию, и мне трудно вернуть что-либо, кроме undefined. Вместо true или false из функции, определенной после

Logger.prototype.shouldPrintMessage = function(timestamp, message)

, я использую хеширование MD5, чтобы сопоставить, если точное сообщение было отправлено ранее.

Это, вероятно, что-то очевидное, но у меня нет достаточный опыт работы с функциями класса / конструктора.

Вам необходимо скопировать и вставить функцию MD5 Ha sh в верхнюю часть кода, чтобы она работала. Вы можете найти его в первом комментарии этого кода.

// MD5 Hash
// Taken from : http://www.myersdaily.org/joseph/javascript/md5-text.html
// Paste Here

/**
 * Initialize your data structure here.
 */
var Logger = function() {
    this.messageStore = {}
};

/**
 * Returns true if the message should be printed in the given timestamp, otherwise returns false.
        If this method returns false, the message will not be printed.
        The timestamp is in seconds granularity. 
 * @param {number} timestamp 
 * @param {string} message
 * @return {boolean}
 */
Logger.prototype.shouldPrintMessage = function(timestamp, message) {
    let hashedMessage = md5(message);
    if (!(hashedMessage in this.messageStore)){
        this.messageStore[message] = timestamp;
    } else if ((timestamp - this.messageStore.hashedMessage) > 9) {
        return true;
    }
    else if ((timestamp - this.messageStore.hashedMessage) < 10) {
        return false;
    }
    else {
        return undefined;
    }
};

/** 
 * Your Logger object will be instantiated and called as such:
 * var obj = new Logger()
 * var param_1 = obj.shouldPrintMessage(timestamp,message)
 */

 var obj = new Logger();
 console.log(obj.shouldPrintMessage(1,"foo"));
 console.log(obj.shouldPrintMessage(2,"bar"));
 console.log(obj.shouldPrintMessage(3,"foo"));
 console.log(obj.shouldPrintMessage(8,"bar"));
 console.log(obj.shouldPrintMessage(10,"foo"));
 console.log(obj.shouldPrintMessage(11,"foo"));

1 Ответ

0 голосов
/ 05 августа 2020

Вам нужно сделать this.messageStore[hashedMessage] = timestamp;, так как это то, как вы его храните, а затем везде, где вы делаете this.messageStore.hashedMessage, вам нужно сделать this.messageStore[hashedMessage']:

// MD5 Hash
// Taken from : http://www.myersdaily.org/joseph/javascript/md5-text.html
// Paste Here
md5 = window.btoa;
/**
 * Initialize your data structure here.
 */
var Logger = function() {
    this.messageStore = {}
};

/**
 * Returns true if the message should be printed in the given timestamp, otherwise returns false.
        If this method returns false, the message will not be printed.
        The timestamp is in seconds granularity. 
 * @param {number} timestamp 
 * @param {string} message
 * @return {boolean}
 */
Logger.prototype.shouldPrintMessage = function(timestamp, message) {
    let hashedMessage = md5(message);
     if (!(hashedMessage in this.messageStore)){
        this.messageStore[hashedMessage] = timestamp;
        return;
    } else if ((timestamp - this.messageStore[hashedMessage]) > 9) {
        return true;
    }
    else if ((timestamp - this.messageStore[hashedMessage]) < 10) {
        return false;
    }
};

/** 
 * Your Logger object will be instantiated and called as such:
 * var obj = new Logger()
 * var param_1 = obj.shouldPrintMessage(timestamp,message)
 */

 var obj = new Logger();
 console.log(obj.shouldPrintMessage(1,"foo"));
 console.log(obj.shouldPrintMessage(2,"bar"));
 console.log(obj.shouldPrintMessage(3,"foo"));
 console.log(obj.shouldPrintMessage(8,"bar"));
 console.log(obj.shouldPrintMessage(10,"foo"));
 console.log(obj.shouldPrintMessage(11,"foo"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...