gpt4 book ai didi

Javascript 无法正确排序包含两个数组值的数组

转载 作者:行者123 更新时间:2023-12-05 01:57:36 27 4
gpt4 key购买 nike

我有两个来自 Php 的 Javascript 数组。我将这些数组合并为一个数组。

所有数组的元素都有 created_at 值 (Laravel)。我想按 created_at

对这些值进行排序

问题:无论他们的日期如何。第一个数组的元素永远不会出现在第二个数组的元素之后

示例:B 有最新日期。但即便如此,C(来自第二个数组)发生在 B 之后。

The problem is although I merged these two arrays into one array.Javascript still thinks "there are two arrays. I should sort firstarray's elements then those of second array."

我要做的是:

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'
},

最佳答案

您可以array#concat 您的数组并使用Schwartzian transform通过将 created_at 转换为可以按字典顺序排序的 YYYY-MM-DD 格式对数组进行排序。

const arr1 = [{name: 'A', created_at: '08/09/2021'}],
arr2 = [{name: 'B', created_at: '15/09/2021'}, {name: 'C', created_at: '08/09/2021'}],
result = arr1.concat(arr2)
.map(o => [o.created_at.replace(/(..)\/(..)\/(....)/, '$3-$2-$1'), o])
.sort((a,b) => a[0].localeCompare(b[0]))
.map(([,o]) => o);
console.log(result)

关于Javascript 无法正确排序包含两个数组值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69108359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com