【发布时间】:2021-11-05 12:57:19
【问题描述】:
我有两个来自 PHP 的 Javascript 数组。我将这些数组合并为一个数组。
所有数组的元素都有created_at 值(Laravel)。我想按created_at对这些值进行排序
问题:无论他们的日期如何。第一个数组的元素永远不会出现在第二个数组的后面
示例:B 的日期最晚。但即便如此,C(来自第二个数组)发生在 B 之后。
问题是虽然我将这两个数组合并为一个数组。 Javascript 仍然认为“有两个数组。我应该先排序 数组的元素然后是第二个数组的元素。”
我该怎么做:
history.push(...response.data[0]); // first array's values
history.push(...response.data[1]); // second array's values
history.sort((a, b) => {
return a.created_at - b.created_at;
});
所以,历史就像
[
// Comes from first array
{
name: 'A',
created_at: '08/09/2021'
},
// Comes from first array
{
name: 'B',
created_at: '15/09/2021'
},
// This third element comes from second array.
{
name: 'C',
created_at: '08/09/2021'
}
]
我期待这个结果:
新的排序历史:
{
name: 'A',
created_at: '08/09/2021'
},
{
name: 'C',
created_at: '08/09/2021'
},
{
name: 'B',
created_at: '15/09/2021'
}
但 Javascript 最初对第一个数组的元素进行排序。之后,对第二个数组的元素进行排序,结果是:
{
name: 'A',
created_at: '08/09/2021'
},
{
name: 'B',
created_at: '15/09/2021'
},
{
name: 'C',
created_at: '08/09/2021'
},
【问题讨论】:
-
元素的顺序正是你将它们添加到数组中的方式。如果你想对数组进行排序,那么你必须明确地这样做。
-
您需要按日期对数组进行排序吗??
-
你从来没有打电话给
history.sort()。你为什么期望它们被重新排序? -
合并两个数组后,您需要对其进行排序` history.sort((r1, r2) => { d1 = new Date(r1.created_at); d2 = new Date(r2. created_at); 返回 d1 > d2 ? 1 : (d1
-
JavaScript 在插入时不会自动对数组元素进行排序。不要混淆 ordered set 和 sorted set 的概念。
标签: javascript arrays vue.js