如何 return 仅排列混合数组字符串中的数字? (Javascript)
How to return only permuted numbers in a mixed array string? (Javascript)
我是一名编码初学者,主要是尝试修改下面的 javascript 代码(我在网上找到的 - Permutations in JavaScript?)以执行以下操作:
- return 仅排列混合字符串中的数字并按降序排列(例如,如果提供的输入是:“D 3fs m4q”,则解决方案应 return "43, 34" .
- return 如果提供的输入不包含任何数字(例如,如果提供的输入是:“GFA”,return null),则出现错误异常消息
P.S 我已经想出了如何实现降序函数,但是,当我尝试使用 .replace 方法仅提取字符串中的数字时,它对我不起作用。我做错了什么?
var permArr = [], usedChars = [];
function permute(input) {
permArr.sort(function(a, b) {return b - a})
permArr.replace(/\D/g);
var i, ch, chars = input.split("");
for (i = 0; i < chars.length; i++) {
ch = chars.splice(i, 1);
usedChars.push(ch);
if (chars.length == 0)
permArr[permArr.length] = usedChars.join("");
permute(chars.join(""));
chars.splice(i, 0, ch);
usedChars.pop();
}
return permArr
};
console.log(solution("458")); //console.log(result);
解决方案可以在 javascript 中吗,因为我正在努力掌握这门语言?任何帮助将不胜感激。提前感谢您的帮助。
我建议您最好的办法是将其分解成多个部分。下面我们有一个更简单的 permutations
函数,使用辅助函数 excluding
。我们有一个函数可以从数字中提取数字。然后我们在这两个之上写主函数。该 main 函数提取数字,创建排列,对它们进行排序,然后将它们连接回以逗号分隔的字符串。
const excluding = (i) => (xs) =>
[... xs .slice (0, i), ... xs .slice (i + 1)]
const permutations = ([...xs]) =>
xs .length == 0
? [[]]
: xs .flatMap ((x, i) => permutations (excluding (i) (xs)) .map (p => x + p))
const extractDigits = ([...s]) =>
s .filter (c => /\d/ .test (c)) .join ('')
const homework = (s, digits = extractDigits (s)) =>
digits .length
? permutations (digits) .sort ((a, b) => b - a) .join (', ')
: 'Your error message here'
console .log (homework ('D 3fs m4q'))
console .log (homework ('GFA'))
虽然数字排序不适用于任意基于数字的字符串,但对于任何不会太大而不会溢出排列的数字集合应该足够好,因为它们有 n!
个长度-n
字符串.
我是一名编码初学者,主要是尝试修改下面的 javascript 代码(我在网上找到的 - Permutations in JavaScript?)以执行以下操作:
- return 仅排列混合字符串中的数字并按降序排列(例如,如果提供的输入是:“D 3fs m4q”,则解决方案应 return "43, 34" .
- return 如果提供的输入不包含任何数字(例如,如果提供的输入是:“GFA”,return null),则出现错误异常消息
P.S 我已经想出了如何实现降序函数,但是,当我尝试使用 .replace 方法仅提取字符串中的数字时,它对我不起作用。我做错了什么?
var permArr = [], usedChars = [];
function permute(input) {
permArr.sort(function(a, b) {return b - a})
permArr.replace(/\D/g);
var i, ch, chars = input.split("");
for (i = 0; i < chars.length; i++) {
ch = chars.splice(i, 1);
usedChars.push(ch);
if (chars.length == 0)
permArr[permArr.length] = usedChars.join("");
permute(chars.join(""));
chars.splice(i, 0, ch);
usedChars.pop();
}
return permArr
};
console.log(solution("458")); //console.log(result);
解决方案可以在 javascript 中吗,因为我正在努力掌握这门语言?任何帮助将不胜感激。提前感谢您的帮助。
我建议您最好的办法是将其分解成多个部分。下面我们有一个更简单的 permutations
函数,使用辅助函数 excluding
。我们有一个函数可以从数字中提取数字。然后我们在这两个之上写主函数。该 main 函数提取数字,创建排列,对它们进行排序,然后将它们连接回以逗号分隔的字符串。
const excluding = (i) => (xs) =>
[... xs .slice (0, i), ... xs .slice (i + 1)]
const permutations = ([...xs]) =>
xs .length == 0
? [[]]
: xs .flatMap ((x, i) => permutations (excluding (i) (xs)) .map (p => x + p))
const extractDigits = ([...s]) =>
s .filter (c => /\d/ .test (c)) .join ('')
const homework = (s, digits = extractDigits (s)) =>
digits .length
? permutations (digits) .sort ((a, b) => b - a) .join (', ')
: 'Your error message here'
console .log (homework ('D 3fs m4q'))
console .log (homework ('GFA'))
虽然数字排序不适用于任意基于数字的字符串,但对于任何不会太大而不会溢出排列的数字集合应该足够好,因为它们有 n!
个长度-n
字符串.