1

我想按时间戳对数组进行排序,但出现未排序错误

var userValue = {
       timestamp,
       username,
       token,
       userid,
       message                      
   };
userArray.push(userValue);

这是我得到的数组

在此处输入图像描述

userArray.sort(function(a, b) {
return a[0]['timestamp'] - b[0]['timestamp'];
});

我想要基于时间戳的排序数组

4

2 回答 2

2

这段代码

userArray[childDatamsg.timestamp] = userValue;

timestamp在索引处添加一个对象。length这就是为什么你有一个带有of的数组的原因1563533788!而是pushuserValue对象userArray

userArray.push(userValue);

现在,它将具有来自 的索引0

然后你可以像这样对数组进行排序:

userArray.sort((a, b) => a.timestamp - b.timestamp)
于 2019-07-19T11:25:51.603 回答
1

以下代码按时间戳的数值排序。如有必要,它会忽略跳过数组条目并执行时间戳的字符串到数字的转换。它假定除了“字符串”和“数字”之外,时间戳记不属于其他数据类型。

userArray.filter ( px_item => {
    return (px_item !== undefined);
})
.map ( px_item => {
    if (typeof px_item === "string") {
        return parseInt(px_item);
    } else {
        return px_item;
    }
})
.sort(function(a, b) {
    if (typeof a === "undefined") {
        return -1;
    } else {
        if (typeof b === "undefined") {
            return 1;
        } else {
            return Math.sign ( a['timestamp'] - b['timestamp'] );
        }
    }
});

原始代码的排序功能错误。这个函数实际上是一个比较函数,用于确定两个元素的相对顺序(在给定的用例中是数组条目)。顺序表示为数值-1( a < b)、0( a = b) 和1( a > b) 之一(实际上,要正确处理比较结果,只要结果具有正确的符号就足够了,因此Math.sign可以消除)。

于 2019-07-19T11:21:14.600 回答