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

标签 javascript arrays vue.js

我有两个来自 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 first array'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/

相关文章:

javascript - 如何在 Vue 中切换 "v-if"时更新 Canvas ?

javascript - 更改 Iron-List 中现有项目的绑定(bind)属性值

javascript - 如何将 Rails current_user 传递给 AngularJS 工厂 API 调用?

JavaScript - webkitSpeechRecognition,听不完

javascript - 图像卷轴 slider - bug

Java ArrayUtils.toPrimitive 我不能做 ArrayUtils.removeElement

javascript - 输入值增量的和数组

javascript - Nuxt 3 包导入说明符 "#internal/nitro"未定义

c++ - 二维数组,在 C 中使用 calloc

javascript - 如何在 v-for 循环中使用 BootstrapVue - Modal?