Простой unshift и уникальный не работает в JavaScript - PullRequest
0 голосов
/ 11 июля 2019

Очень упрощенный код, все же жарят мне мозги несколько часов? Итак, как вы можете видеть на функции add, она в основном принимает 2 параметра; IP-адрес и дата UNIX

const redis = require("redis"), client = redis.createClient();
const {promisify} = require('util');
const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);

_ = require('lodash');
_weg = require('wegweg')({
    globals: false
});

module.exports = {

    add: async function (ip, cday) {
        var key = _weg.md5('dact:' + ip);
        return await getAsync(key).then((result) => {
            let value;
            if (result == null) {
                value = [];
            } else {
                value = result;
            }
            value = value.unshift(cday);
            value = _.uniq(value);
            return setAsync(key, value);
        });
    }

};

Так что, если я иду вперед и прохожу оба:

await ping_history.add("127.0.0.1", 1562774400);

Вроде не вставляется массив или что-то? key должно быть MD5 & value должно быть просто массивом дат, которые все являются уникальными.

1 Ответ

2 голосов
/ 11 июля 2019

Метод unshift изменяет массив на месте, он не возвращает новый массив. Возвращаемое значение unshift - это новая длина массива. Итак, после

value = value.unshift(cday);

переменная value теперь содержит число, а не массив.

value = [1, 2, 3, 4];
value = value.unshift(10);
console.log(value);

Просто напишите

value.unshift(cday);

без переназначения переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...