javascript - 简单的 unshift 和 unique 不适用于 JavaScript

标签 javascript node.js redis

非常简单的代码,却让我绞尽脑汁几个小时?所以正如您在 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 应该只是一个唯一的日期数组。

最佳答案

unshift 方法就地修改数组,它不返回新数组。 unshift 的返回值是数组的新长度。所以之后

value = value.unshift(cday);

value 变量现在包含一个数字,而不是数组。

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

随便写

value.unshift(cday);

无需重新分配变量。

关于javascript - 简单的 unshift 和 unique 不适用于 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56979167/

相关文章:

javascript - 在 for 循环中访问动态变量名称

Javascript 更新函数

node.js - 使用 ssh2 sftp Node 读取较大的 sftp 文件

bash - 如何阻止 Bash 脚本因错误而退出

javascript - firefox 和 radialgradient(使用 html5 Canvas )

javascript - 在 jquery 插件中创建动态选择器

node.js - 使用 supertest 设置超时不起作用

mysql - 带有错误 : connect ECONNREFUSED 的 docker mysql

node.js - 使用 kue 连接到 redis 总是创建到 localhost 的连接

javascript - 创建基本分析页面