本文将介绍一些常用的数组处理函数和语法,如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之数组处理内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

React与Redux之数组处理讲解的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  5. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  6. ios – React native链接到另一个应用程序

    如果是错误的,有人知道如何调用正确的吗?

  7. ios – React Native – 在异步操作后导航

    我正在使用ReactNative和Redux开发移动应用程序,我正面临着软件设计问题.我想调用RESTAPI进行登录,如果该操作成功,则导航到主视图.我正在使用redux和thunk所以我已经实现了异步操作,所以我的主要疑问是:我应该把逻辑导航到主视图?我可以直接从动作访问导航器对象并在那里执行导航吗?.我对组件中的逻辑没有信心.似乎不是一个好习惯.有没有其他方法可以做到这一点?

  8. ios – 获取资产目录文件夹中所有图像的数组

    在iOS中,是否可以获取资产目录文件夹中的图像数组?我不确定为什么会对此进行投票.我真的不知道从哪里开始.我的另一种方法是创建文件夹中所有文件的plist,但它似乎是多余的.我无法添加任何代码,因为我会添加什么?

  9. 在ios中使用带有React Native(0.43.4)的cocoapods的正确方法是什么?

    我已经挖掘了很多帖子试图使用cocoapods为本地ios库设置一个反应原生项目,但我不可避免地在#import中找到了丢失文件的错误.我的AppDelegate.m文件中的语句.什么是使用反应原生的可可豆荚的正确方法?在这篇文章发表时,我目前的RN版本是0.43.4,而我正在使用Xcode8.2.1.这是我的过程,好奇我可能会出错:1)

  10. ios – 使用react-native-router-flux和redux,如何更新视图组件中的状态?

    为了完整起见,整个代码可以在github找到.解决方法您可能忘记将Launch组件连接到商店.你想要做的是类似于你在ExampleContainer中所做的,即然后正确的值将显示在您的日志中

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部