【问题标题】:Only Parts of Array Are Sorted [duplicate]仅对数组的部分进行排序[重复]
【发布时间】:2020-04-20 08:49:55
【问题描述】:

由于某种原因,sort 方法正确地对数组的两个块进行排序,但随后对这两个块进行了错误排序...

cp.exec('wmic logicaldisk get freespace,name,size,volumename', (error, stdout)=>{
  drives = stdout.trim().split('\r\r\n')
    .map(value => value.trim().split(/\s{2,}/))
    .slice(1)

    .sort((aa,ba)=>{
      const
        a = aa[0],
        b = ba[0]
      if (a < b) return -1
      else if (a > b) return 1
      else return 0
    })

    console.log(drives)
})

原始输出:

0: [ ... "C:", ... ]
1: [ ... "D:", ... ]
2: [ ... "E:", ... ]
3: [ ... "F:", ... ]
4: [ ... "G:", ... ]
5: [ ... "H:", ... ]
6: [ ... "I:", ... ]
7: [ ... "J:", ... ]
8: [ ... "K:", ... ]

预期输出:

5: [  "559056044032", "C:", ... ]
6: [  "788449492992", "G:", ... ]
7: [  "945300619264", "K:", ... ]
8: [  "999369699328", "D:", ... ]
//
0: [ "1511574335488", "E:", ... ]
1: [ "2296009408512", "H:", ... ]
2: [ "3507750227968", "J:", ... ]
3: [ "3594248679424", "I:", ... ]
4: [ "4620751712256", "F:", ... ]

实际输出:

0: [ "1511574335488", "E:", ... ]
1: [ "2296009408512", "H:", ... ]
2: [ "3507750227968", "J:", ... ]
3: [ "3594248679424", "I:", ... ]
4: [ "4620751712256", "F:", ... ]
// it properly sorts each of these two chunks but
// then it arranges the chunks in the wrong order
5: [  "559056044032", "C:", ... ]
6: [  "788449492992", "G:", ... ]
7: [  "945300619264", "K:", ... ]
8: [  "999369699328", "D:", ... ]

为什么会这样?

【问题讨论】:

  • 不是第二个根据您上面的演示正确排序整个数组吗??
  • @shahinmahmud 不,不是。顺序应该是从最小到最大的 CGKD-EHJIF,但顺序是 EHJIF-CGKD。应该放置在数组开头的可用空间最少的驱动器是驱动器 C。这两个块彼此独立地正确排序,但相互无序
  • 可用空间 => "1511574335488",你想按数字排序吗??
  • @shahinmahmud 正确。每个嵌套数组中索引0 处的第一项是磁盘freespace,我正在尝试将它们从最小到最大排序freespace
  • 只要使用.sort((aa,ba) =&gt; aa[0] - ba[0])

标签: javascript arrays sorting multidimensional-array columnsorting


【解决方案1】:
cp.exec('wmic logicaldisk get freespace,name,size,volumename', (error, stdout)=>{
  drives = stdout.trim().split('\r\r\n')
    .map(value => value.trim().split(/\s{2,}/))
    .slice(1)

    .sort((aa,ba)=>{
      const
        a = Number(aa[0]),
        b = Number(ba[0])
      if (a < b) return -1
      else if (a > b) return 1
      else return 0
    })

    console.log(drives)
})

如果你想对它们进行数字排序,那么上面是代码。 您的代码按字典顺序对它们进行排序。

【讨论】:

  • 天哪,我太愚蠢了。当我在你的回答中看到Number() 时,我就意识到我的错误了,哈哈
  • 这发生在我们每个人身上,伙计:P
  • .sort((aa,ba) =&gt; aa[0] - ba[0]) 应该可以工作。减法会将字符串强制转换为数字
猜你喜欢
  • 2020-04-08
  • 2011-04-28
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 2021-12-13
  • 2021-07-25
相关资源
最近更新 更多