React与Redux之数组处理讲解

 更新时间:2021年9月12日 12:00  点击:1937

本文将介绍一些常用的数组处理函数和语法,如reduce()、filter()、map()、every()、some()、展开运算符。这些知识和React与Redux本身没有直接关系,但是本章的示例中包含了这些函数和语法的用法,我们正好可以在程序中学习它们。另外值得一提的是,reduce()、filter()、map()等函数的思想来自函数式编程,感谢JavaScript是一门函数式编程语言,让原本复杂的逻辑处理变得如此简单。

reduce()

概述

reduce()方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。

语法

array.reduce(callback,initialValue)

参数解释如下。
·callback:执行数组中每个值的函数(也可以叫reducer),包含四个参数。 
previousValue:上一次调用回调返回的值,或者是提供的初始值(initialValue).
currentValue:数组中当前被处理的元素。
index:当前元素在数组中的索引。
array:调用reduce的数组
·initialValue:作为第一次调用callback的第一个参数。这个参数不是必需的。
示例

const completedCount=todos.reduce(
(count,todo)=>(todo.completed?count+1:count),
0);

代码解释:

·todos是一个数组。
reduce()的第一个参数是箭头函数,这个箭头函数的第一个参数count是上一个返回值,第二个参数todo是当前元素的值。
·reduce()的第二个参数0是个初始化值,作用是使count的初始值为0.
追历数组todos的第一个值的时候,count为0.todo是todos的第一项,返回值加一或者不变(如果todo.completed为true,则返回count+1,否则返回count).
遍历数组todos的第二个值的时候,count为上一个返回值。todo是todos的第二项,返回值加一或者不变。
遍历结束后,即可得到数组中completed属性为true的个数,也就是已完成的任务的个数。

filter()

概述

filter()方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组。

语法

array.filter(callback,thisArg)

参数解释如下。

·callback:用来测试数组的每个元素的函数,包含三个参数。返回true表示保留该元
素(通过测试),返回false则不保留。
·currentValue:数组中当前被传递的元素。
index:元素的索引。
array:被遍历的数组。
·thisArg:可选。执行callback时使用的this值。

return state.filter(todo=>
todo.id!==action.id
)

代码解释:

state是个任务数组。
·filter()的参数是箭头函数。该箭头函数只有一个参数todo,也就是数组的当前项元
素,箭头后面那个判断语句,如果返回true则保留当前项,反之则移除当前项。
该代码段的作用是,过滤掉任务数组中id与指定id相同的任务,返回一个新的任务数组。

map()

概述

map()方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。

语法

array.map(callback,thisArg)

参数解释如下。

·callback:原数组中的元素调用该方法后返回一个新的元素。该方法包含如下三个参数。
currentValue:数组中当前被传递的元素。
·index:元素的索引。
array:被遍历的数组。
thisArg:可选。执行callback时使用的this值。

示例 

return state.map(todo=>(
todo.id===action.id?
Object.assign({},todo.{ text:action.text}):
todo
));

代码解释:

state是变化前的state,是一个数组。
map()的参数是个箭头函数。该箭头函数的第一个参数是todo,返回值是一个使用三元运算符的表达式,用于返回新元素。如果id匹配,则通过0bject.assign()合并一个新的属性,也就是给todo添加或者重写一个text属性,属性值为action.text
Object.assign()方法可以把任意数目的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

语法为Object.assign(target,...sources).target是目标对象,sources是任意数目的源对象。
这段代码的作用是为数组中指定的任务更新text属性。

every()

概述

every()方法用于测试数组中所有元素是否都通过了指定函数的测试。

语法

array.every(callback,thisArg)

callbak:用来测试每个元素的函数。
currentValue:数组中当前被传递的元素。
index:元素的索引。
array:被追历的数组。
·thisArg:可选。执行callback时使用的this值。

示例

const areAllMarked=state.every(todo=>todo.completed)

遍历任务数组、每一项任务的completed属性均为true时候,返回true.

some()

概述

some()方法用于测试数组中是否至少有一项元素通过了指定函数的测试。

语法

array.some(callback[,thisArg])

参数解释如下。

·callback:用来测试每个元素的函数。
currentValue:数组中当前被传递的元素。
index:元素的索引。
array:被遍历的数组。
thisArg:可选。执行callback时使用的this值。

示例

const areAllMarked=state.some(todo=>todo.completed)

遍历任务数组、只要有一项任务的completed属性为true,返回true.

展开运算符

概述

展开运算符允许一个表达式在某处展开。常用的场景包括:函数参数、数组元素、解构赋值。
另外,JSX中的组件props也可以使用展开运算符来赋值。
解构赋值(destructuring assignment)语法是一个 JavaScript表达式,它使得从数组或者对象中提取数据赋值给不同的变量成为可能。

语法

用于函数参数:

myFunction(...iterable0bj);

用于数组元素:

[...iterableobj,4,5,6]

用于解构赋值:

const [a,b,...rest]=[1,2,3,4,5]
const {a,b,...rest}={a:1,b:2,c:3,d:4}

用于React 组件的props:

<App...iterable0bj/>

示例

展开state
数组的每一项到当前的数组。 

return[
id:state.reduce((maxId,todo)=>Math,max(todo,id,maxId),-1)+1,
{
completed:false,
text:action.text,
},
...state,
];

展开actions的每一个属性到组件中。

<TodoItem key={todo.id}todo={todo}{...actions}/>

总结

reduce()方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
·filter()方法使用指定的函数测试所有元索,并创建一个包含所有通测试的元素的新数组。
map()方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数
·every()方法测试数组的所有元素是否都通过了指定函数的测试。
·some()方法用于测试数组中是否至少有一·项元素通过了指定函数的测试。
·展开运算符允许一个表达式在某处展开。常用的场量包托,函数参数、数组构赋值。另外,JSX中的组件props也可以使用展开运算符来赋值。 

到此这篇关于React与Redux之数组处理讲解的文章就介绍到这了,更多相关React与Redux之数组处理内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • 关于React Native报Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>错误(解决方案)

    这篇文章主要介绍了关于React Native报Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>错误,本文给大家分享解决方案,需要的朋友可以参考下...2021-05-12
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
  • React引入antd-mobile+postcss搭建移动端

    本文给大家分享React引入antd-mobile+postcss搭建移动端的详细流程,文末给大家分享我的一些经验记录使用antd-mobile时发现我之前配置的postcss失效了,防止大家踩坑,特此把解决方案分享到脚本之家平台,需要的朋友参考下吧...2021-06-21
  • React使用高德地图的实现示例(react-amap)

    这篇文章主要介绍了React使用高德地图的实现示例(react-amap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-18
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • js有序数组的连接问题

    1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04
  • 使用 React 和 Threejs 创建一个VR全景项目的过程详解

    这篇文章主要介绍了使用 React 和 Threejs 创建一个VR全景项目的过程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06
  • python 实现将Numpy数组保存为图像

    今天小编就为大家分享一篇python 实现将Numpy数组保存为图像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27