小工具知识网

当前位置: 首页 > 行业知识 > 全排列,手写reduce

行业知识

全排列,手写reduce

2026-11-14 12:23:34 来源:互联网转载

全排列

  1. 字符串参数中的字符无重复且仅包含小写字母
  2. 返回的排列组合数组不区分顺序
const _permute = string => {  if (string.length === 1) {    return [string];  }  const res = [];  for (let s of string) {    const arr = string.split('').filter(str => str !== s);    _permute(arr.join('')).forEach(item => {      res.push(s + item);    });  }  return res;};
const input = 'abc';const result = _permute(input);console.log(result);

这���代码是一个递归函数 _permute,用于生成字符串参数的所有排列组合。它使用了回溯法的思想。

()

首先,如果字符串的长度为 1,表示已经无法再进行排列,直接返回包含该字符串的数组 [string]。

否则,创建一个空数组 res,然后对字符串中的每个字符 s 进行遍历。在每次遍历中,生成一个新的数组 arr,其中排除当前字符

s。接着,递归调用 _permute 函数,传入 arr.join(‘’) 作为新的字符串参数,获取其排列组合结果。

对于递归返回的每个排列组合 item,将当前字符 s 与 item 拼接,并将结果添加到 res 数组中。

最后,函数返回所有排列组合的结果数组 res。

reduce

手写reduce函数

Array.prototype._reduce = function(fn, prev) {  for (let i = 0; i    

该函数的参数 fn 是一个回调函数,用于对数组中的元素进行累积操作。prev 是初始值或上一次累积的结果。

在函数内部,使用一个 for 循环遍历数组的每个元素。如果 prev 未定义(即第一次循环),则将当前元素 this[i] 和下一个元素

this[i + 1],以及当前元素的索引 i + 1 和原始数组 this,传递给回调函数 fn。注意,此处的索引是 i +

1,因为在下一次循环中,下一个元素将作为当前元素。

在后续的循环中,将之前的累积结果 prev 和当前元素 this[i],以及当前元素的索引 i 和原始数组 this,传递给回调函数 fn。

每次循环都将回调函数返回的结果更新到 prev 中。

最后,返回累积的结果 prev。

使用:

const numbers = [1, 2, 3, 4, 5];const sum = numbers._reduce((prev, curr) => prev + curr, 0);console.log(sum); // 输出 15,表示数组中所有元素的和

上一篇:长城服务器上班怎么样?

下一篇:营业执照为什么要去派出所备案呢怎么回事