重新排序日志文件中的数据-Javascript
我正在尝试解决在日志文件中重新排序数据的算法 您有一个日志数组。每个日志都是一个以空格分隔的字符串 对于每个日志,每个日志中的第一个单词是字母数字标识符。然后,要么: 标识符后的每个单词将仅由小写字母组成,或; 标识符后的每个单词将仅由数字组成。 我们将这两种日志称为字母日志和数字日志。保证每个日志在其标识符后至少有一个字重新排序日志文件中的数据-Javascript,javascript,sorting,dictionary,Javascript,Sorting,Dictionary,我正在尝试解决在日志文件中重新排序数据的算法 您有一个日志数组。每个日志都是一个以空格分隔的字符串 对于每个日志,每个日志中的第一个单词是字母数字标识符。然后,要么: 标识符后的每个单词将仅由小写字母组成,或; 标识符后的每个单词将仅由数字组成。 我们将这两种日志称为字母日志和数字日志。保证每个日志在其标识符后至少有一个字 重新排列日志,使所有字母日志位于任何数字日志之前。字母日志按字典顺序排列,忽略标识符,标识符用于领带。数字日志应按原始顺序放置 返回日志的最终顺序 例如: Input: lo
重新排列日志,使所有字母日志位于任何数字日志之前。字母日志按字典顺序排列,忽略标识符,标识符用于领带。数字日志应按原始顺序放置 返回日志的最终顺序 例如:
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
我的想法是有一张数字地图和一张字母地图。我已经做到了。然后,我需要对数字和字母进行排序,并将所有排序的字母添加到我的答案数组中,将所有排序的数字添加到我的答案数组中
var reorderLogFiles = function(logs) {
if(!logs || logs.length === 0)
return [];
let numbers = {
'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
'7': 7, '8': 8, '9': 9
};
let digits = new Map();
let letters = new Map();
for(let i=0; i<logs.length; i++) {
const log = logs[i].split(" ");
if(numbers[log[1]] !== undefined)
digits.set(log[0], log.splice(1, log.length));
else
letters.set(log[0], log.splice(1, log.length));
}
// How can I sort letter and digits?
let ans = [];
for(const [key, value] of sortedLetters) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
for(const [key, value] of sortedDigits) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
return ans;
};
var reorderLogFiles=函数(日志){
如果(!logs | | logs.length==0)
返回[];
让数字={
'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
'7': 7, '8': 8, '9': 9
};
让数字=新映射();
让字母=新地图();
对于(设i=0;i我认为您可以稍微简化代码。首先,通过过滤原始日志来创建数字和字母组;通过首先拆分日志中的所有值,可以简化这一过程。接下来,根据数组中的第二个值对字母进行排序,并将数字添加到排序数组的末尾。最后,联接代码>将字符串重新组合在一起:
const reorderLogFiles=logs=>{
//在第一个空间上拆分值
logs=logs.map(v=>v.split(/\s+(.*)/).filter(布尔));
//过滤成数字和字母
让digits=logs.filter(v=>v[1]。匹配(/^[\s\d]+$/);
让letters=logs.filter(v=>v[1]。匹配(/^[a-z\s]+$/);
//把信分类
letters.sort((a,b)=>(c=a[1].localeCompare(b[1])?c:a[0].localeCompare(b[0]);
//重新整理清单
结果=字母.concat(数字);
//并转换回字符串
result=result.map(a=>a.join(“”));
返回结果;
}
let logs=[“dig1 8 1 5 1”、“let1艺术罐”、“dig2 3 6”、“let2自有工具挖掘”、“let3艺术零度”];
log(reorderLogFiles(logs));
日志=[“a1 9 2 3 1”、“g1 act car”、“zo4 4 7”、“ab1 off key dog”、“a8 act zoo”、“a2 act car”];
console.log(reorderLogFiles(logs));
谢谢;但是,由于以下输入而失败:[“a1 9 2 3 1”,“g1 act car”,“zo4 4 7”,“ab1 off key dog”,“a8 act zoo”,“a2 act car”]。输出应为:[“a2 act car”,“g1 act car”,“a8 act zoo”,“ab1 off key dog”,“a1 9 2 3 1”,“zo4 4 7”]“字母日志是按字典顺序排列的,忽略标识符,标识符用于领带”我认为这是issue@myTest532myTest532-抱歉,我没有说到这一点。我已经更新了答案。谢谢。有没有不使用regex的方法可以做到这一点?@myTest532myTest532当然,请参阅我的编辑,或者参阅和以了解其他可能性