我一直在纠结.sort()和.concat()函数,试图将多个数字和文本数组组合为一个并按时间顺序对其进行排序。如果仅将数字输入到数组中,则似乎工作正常,但是一旦有文本,它似乎将其随机放置(在这种情况下,介于6和7之间)。此外,如果我从数组中删除数字3,则数字4文本之后的结尾顺序都乱七八糟,都在9到10之间。我不知道为什么如果有人可以帮助,为什么这样做。
仅包含数字
var multiArray = [[2, 8, 1, 7, 9], [6, 3, 5, 4, 10]];
// returns 1,10,2,3,4,5,6,7,8,9
document.write(multiArray[0]
.concat(multiArray[1])
.sort()
+"<br/>");
// returns 1,2,3,4,5,6,7,8,9,10
document.write(multiArray[0]
.concat(multiArray[1])
.sort((a,b)=>a-b)
+"<br/>");
并带有文字
var multiArray = [[2, 8, 1, 7, 9], [6, 3, 5, "text", 4, 10]];
// returns 1,2,3,4,5,6,text,7,8,9,10
document.write(multiArray[0]
.concat(multiArray[1])
.sort((a,b)=>a-b)
+"<br/>");
不包含3
var multiArray = [[2, 8, 1, 7, 9], [6, 5, "text", 4, 10]];
// returns 1,2,5,6,7,8,9,text,4,10
document.write(multiArray[0]
.concat(multiArray[1])
.sort((a,b)=>a-b)
+"<br/>");
答案 0 :(得分:0)
首先,将所有数组合并为一个数组
var multiArray = [[2, 8, 1, 'foo', 7, '1', 9], [6, 5, 'text', 4, 'bar', 10]];
var flattenArray = [].concat(...multiArray); // [ 2, 8, 1, 'foo', 7, '1', 9, 6, 5, 'text', 4, 'bar', 10 ]
然后分别对数字和字符串进行排序
const sortedNumbers = flattenArray
.filter(n => typeof n === 'number')
.sort((a, b) => a - b);
const sortedStrings = flattenArray
.filter(n => typeof n === 'string')
.sort();
最后,同时连接两个
const sorted = sortedNumbers.concat(sortedStrings); // [ 1, 2, 4, 5, 6, 7, 8, 9, 10, '1', 'bar', 'foo', 'text' ]
我假设您要在数字后面输入字符串。否则,只需反转连接:
const sorted = sortedStrings.concat(sortedNumbers);