数组的操作(2)

简介: 1、使用递归。对于给定字符串中的每个字母,为字母创建字谜。使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于2或1。const anagrams = str => { if (str.

1、使用递归。对于给定字符串中的每个字母,为字母创建字谜。使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于2或1。

const anagrams = str => {

  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];

  return str.split('').reduce((acc, letter, i) =>

    acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)), []);

};

// anagrams('abc') -> ['abc','acb','bac','bca','cab','cba']

// anagrams('读好书') -> ["读好书", "读书好", "好读书", "好书读", "书读好", "书好读"]
 

 相当于数据里的排列组合里面的 全排列 个数就是  arr.length ! 

 这里介绍一些 reduce  。

mdn说:

reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

var total = [0, 1, 2, 3].reduce(function(sum, value) {
  return sum + value;
}, 0);
// total is 6

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
}, []);
// flattened is [0, 1, 2, 3, 4, 5]

可以简单理解对 数组的元素逐项做操作,下面是es6的写法

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
  ( acc, cur ) => acc.concat(cur),
  []
);

详细案例参考  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

更多有趣的数组操作: http://news.51cto.com/art/201712/561035.htm  

     https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651553296&idx=1&sn=dcec2412f5b4bdeef4971fd0c96f3958&chksm=8025a9d1b75220c77a9784056bb69a54cfb4d41dcc9dae971e321ce0074747bc6dc054505ae3&mpshare=1&scene=23&srcid=1218kPR7PaP1ZqyIVoLHXfHH#rd

目录
相关文章
|
6月前
|
存储 C语言 索引
数组元素的删除
数组元素的删除
|
6月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
110 1
|
6月前
|
C语言 C++
【C++之数组与指针2】利用指针对数组求和
【C++之数组与指针2】利用指针对数组求和
|
6月前
|
索引
数组的操作
`splice`方法改变原数组,如`arr.splice(a, b)`从下标`a`开始截取`b`个数。`push()`在数组尾部添加元素并返回新长度,`pop()`删除并返回尾部元素。`unshift()`在头部添加,`shift()`删除并返回头部元素。`findIndex()`返回满足条件的元素下标,否则-1。`forEach`遍历数组,`map`类似但返回新数组。
38 1
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
|
5月前
|
索引
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)
|
5月前
|
编译器
数组\插入删除数组元素
数组\插入删除数组元素
24 0
|
6月前
|
存储 JavaScript 前端开发
数组:数组是JS中的一种特殊对象,用于存储一组有序的数据。需要掌握数组的创建、访问、修改以及各种内置方法。
数组:数组是JS中的一种特殊对象,用于存储一组有序的数据。需要掌握数组的创建、访问、修改以及各种内置方法。
75 2
|
6月前
|
存储 Scala
创建集合和数组
创建集合和数组
44 0
|
6月前
|
BI
多维数组元素的指针访问方式
以二维数组为例介绍多维数组的指针访问方式。
57 0