如何对JavaScript数组进行排序

时间:2019-07-19 11:09:29

标签: javascript

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

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

这是我得到的数组

enter image description here

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

我希望基于时间戳对数组进行排序

3 个答案:

答案 0 :(得分:2)

userArray.sort(function(a, b){
return a.timestamp - a.timestamp;})

userArray是一个JavaScript数组,它支持sort方法。此方法接受一个函数作为参数,该函数根据返回的值对数组进行排序。

当前,排序算法会将时间戳最小的元素排在第一位。如果要在另一个方向上对数组进行排序,请交换a.timestamp和b.timestamp。

您可以看到一个示例Click Here

答案 1 :(得分:2)

此代码

userArray[childDatamsg.timestamp] = userValue;

timestamp索引处添加一个对象。这就是为什么您有一个length的{​​{1}}数组的原因!而是将1563533788的{​​{1}}对象push

userValue

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

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

userArray.push(userValue);

答案 2 :(得分:1)

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

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'] );
        }
    }
});

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