如何 return 仅排列混合数组字符串中的数字? (Javascript)

How to return only permuted numbers in a mixed array string? (Javascript)

我是一名编码初学者,主要是尝试修改下面的 javascript 代码(我在网上找到的 - Permutations in JavaScript?)以执行以下操作:

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 字符串.