我想按时间戳对数组进行排序,但出现未排序错误
var userValue = {
timestamp,
username,
token,
userid,
message
};
userArray.push(userValue);
这是我得到的数组
userArray.sort(function(a, b) {
return a[0]['timestamp'] - b[0]['timestamp'];
});
我希望基于时间戳对数组进行排序
答案 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'] );
}
}
});
原始代码的排序功能错误。此函数实际上是一个比较函数,用于确定两个元素的相对顺序(在给定的用例中,它们是数组条目)。该顺序表示为以下数值之一:-1
(a < b
),0
(a = b
)和1
(a > b
)(实际上,为了正确处理比较结果,只要结果具有正确的符号即可,因此Math.sign
可以消除。)