【发布时间】: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) => aa[0] - ba[0])
标签: javascript arrays sorting multidimensional-array columnsorting