我接收阵列是这样的:JavaScript - 如何通过数字字符串对数组进行排序?
[
[{"name":"one","team":"------","checked":false,"position":"-"},
{"name":"two","team":"------","checked":false,"position":"1"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"four","team":"------","checked":false,"position":"7"}]
]
我想要的最终输出是这样的:
[
[{"name":"two","team":"------","checked":false,"position":"1"},
{"name":"four","team":"------","checked":false,"position":"7"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"one","team":"------","checked":false,"position":"-"}]
]
这意味着,该阵列是由最大位置值和所述至少位置值排序在第一子阵列中,然后是第二子阵列中的第二最大位置值和第二最小位置值。如果在位置上有一个“ - ”,它将留在字符串编号之后。
到目前为止,我已经与lodash试过这样:
var mergedArray = vm.roundOf4[0].concat(vm.roundOf4[1]);
var count = _.countBy(mergedArray, {position: '-'});
var ascArray = _.cloneDeep(mergedArray);
var descArray = _.cloneDeep(mergedArray);
_.sortByOrder(ascArray, 'position', 'asc');
_.sortByOrder(descArray, 'position', 'desc');
_.times(count.true, ascArray.push(ascArray.shift()));
vm.roundOf4.some(function (array, i) {
array.some(function (object, j) {
if (j === 0) {
vm.roundOf4[i][j] = ascArray[i];
} else if (j === 1) {
vm.roundOf4[i][j] = descArray[i];
}
});
});
但按功能分类的升序排序是不正确的排序位置值,所以它给随机排序。我不知道这是因为position是一个字符串值。
我应该用数字来代替吗?
'1'和'-'是相同的子阵列,但在你需要的输出他们分开。这背后的逻辑是什么? –
没有逻辑,只是“ - ”还没有设置。它可以是另一个数字,但是因为它尚未设置,所以它被留在最后,这同样适用于任何对象。 – forkfork
不是在谈论'-',我正在谈论'1'和'-'是如何在排序后相互分离的! (**之前:**他们在同一个子阵列中,**之后:**每个人都去了一个不同的子阵列)! '7'和'3'也一样! –