js数组中indexOf/filter/forEach/map/reduce详解
今天在网上看到一篇帖子,如题:
出处:前端开发博客 (http://caibaojian.com/5-array-methods.html)
在ES5中一共有9个Array方法,分别是:
Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array.prototype.forEach Array.prototype.map Array.prototype.filter Array.prototype.reduce Array.prototype.reduceRight
1) indexOf
indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1。
via不使用indexOf时原文来自:http://caibaojian.com/5-array-methods.html
var arr = ['apple','orange','pear'], found = false;for(var i= 0, l = arr.length; i< l; i++){ if(arr[i] === 'orange'){ found = true; } }console.log("found:",found);
使用后
var arr = ['apple','orange','pear'];console.log("found:", arr.indexOf("orange") != -1);
2) filter
该filter()方法创建一个新的匹配过滤条件的数组。
不用 filter() 时
var arr = [ {"name":"apple", "count": 2}, {"name":"orange", "count": 5}, {"name":"pear", "count": 3}, {"name":"orange", "count": 16}, ];var newArr = [];for(var i= 0, l = arr.length; i< l; i++){ if(arr[i].name === "orange" ){ newArr.push(arr[i]); } }console.log("Filter results:",newArr);
用了 filter():
var arr = [ {"name":"apple", "count": 2}, {"name":"orange", "count": 5}, {"name":"pear", "count": 3}, {"name":"orange", "count": 16}, ];var newArr = arr.filter(function(item){ return item.name === "orange"; });console.log("Filter results:",newArr);
3) forEach()
forEach为每个元素执行对应的方法
var arr = [1,2,3,4,5,6,7,8];// Uses the usual "for" loop to iterate for(var i= 0, l = arr.length; i< l; i++){ console.log(arr[i]); }console.log("========================");//Uses forEach to iterate arr.forEach(function(item,index){ console.log(item); });
forEach是用来替换for循环的
4) map()
map()对数组的每个元素进行一定操作(映射)后,会返回一个新的数组,
不使用map
var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}];function getNewArr(){var newArr = [];for(var i= 0, l = oldArr.length; i< l; i++){ var item = oldArr[i]; item.full_name = [item.first_name,item.last_name].join(" "); newArr[i] = item; }return newArr; }console.log(getNewArr());
使用map后
var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}];function getNewArr(){return oldArr.map(function(item,index){ item.full_name = [item.first_name,item.last_name].join(" "); return item; });}console.log(getNewArr());
map()是处理服务器返回数据时是一个非常实用的函数。
5) reduce()
reduce()可以实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。
说实话刚开始理解这句话有点难度,它太抽象了。
场景: 统计一个数组中有多少个不重复的单词
不使用reduce时
var arr = ["apple","orange","apple","orange","pear","orange"];function getWordCnt(){ var obj = {};for(var i= 0, l = arr.length; i< l; i++){ var item = arr[i]; obj[item] = (obj[item] +1 ) || 1; }return obj; }console.log(getWordCnt());
使用reduce()后
//code from http://caibaojian.com/5-array-methods.html var arr = ["apple","orange","apple","orange","pear","orange"];function getWordCnt(){ return arr.reduce(function(prev,next){ prev[next] = (prev[next] + 1) || 1; return prev; },{}); }console.log(getWordCnt());
让我先解释一下我自己对reduce的理解。reduce(callback, initialValue)会传入两个变量。回调函数(callback)和初始值(initialValue)。假设函数它有个传入参数,prev和next,index和array。prev和next你是必须要了解的。
一般来讲prev是从数组中第一个元素开始的,next是第二个元素。但是当你传入初始值(initialValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
比如:
/* * 二者的区别,在console中运行一下即可知晓 */var arr = ["apple","orange"];function noPassValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next);return prev + " " +next; }); } function passValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next);prev[next] = 1; return prev; },{}); }最后感谢大神的指点;
出处:前端开发博客 (http://caibaojian.com/5-array-methods.html)
转载于:https://www.cnblogs.com/leungUwah/p/6017971.html
js数组中indexOf/filter/forEach/map/reduce详解相关推荐
- python多维数组添加元素_numpy中三维数组中加入元素后的位置详解
今天做数据处理时,遇到了从三维数组中批量加入二维数组的需求.其中三维数组在深度学习的特征数据处理时经常会使用到,所以读者有必要对该小知识点做到清楚了解并掌握.现对三维数组中的元素位置结合代码做详细归纳 ...
- js数组中indexOf和findIndex的区别
1. indexOf 语法 arr.indexOf(searchElement[, fromIndex]) 参数 searchElement 要查找的元素 fromIndex (可选 ) 开始查找 ...
- JS 数组中的 filter 方法
1.定义 filter()创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 2.语法 array.filter(function(currentValue,index,arr) ...
- 怎样理解js数组中indexOf()的用法与lastIndexOf
第一首先你运行一下它的js代码: var arr1=["大学","中庸","论语","孟子","诗" ...
- 第J题-=数组中等于K的数对(详解) =======给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...
- 【OpenCV4】查找图像,数组中最大最小值 cv::minMaxLoc() 使用详解(c++)
函数原型 1: void cv::minMaxLoc ( InputArray src,double * minVal,double * maxVal = 0,Point * minLoc = 0,P ...
- js数组中forEach/some/every/map/filter/reduce的区别
2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...
- js中every用法_js数组中的方法 some, every, filter, find,map, reduce讲解及使用场景
前言 之前对数组的循环来说,我拿到代码就使用forEach循环,主要原因是我对数组的其他方法不是很了解,以及觉得forEach已经可以做到想要的效果,没必要在去使用其他方法,这都是对使用场景不了解导致 ...
- JS数组中 forEach() 和 map() 的区别
JS数组中 forEach() 和 map() 的区别 Array中 Array.forEach()和 Array.map()方法之间的区别. forEach()和map()方法通常用于遍历Array ...
最新文章
- 技术图文:如何实现汉诺塔问题?
- 代码Overlay机制
- 热点事件发现、演化及时间线Timeline、故事线Storyline自动生成
- 简单一招搞定公司牛人 转自 潘文富
- SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战
- mac xcode c++ cin cout注意细节一
- 多分类问题的另一种处理策略——softmax回归
- Linux内存管理 (3)内核内存的布局图
- 利用MDTools和Hydraw设计专业的液压阀块
- java 拟合曲线_关于java实现自定义曲线拟合的研究
- element修改图标的大小
- 音频-音频术语名词解释
- 汇编语言_使用int16h中断读取键盘缓冲区
- xbox360链接pc_如何在Windows PC上使用Xbox One控制器
- 写论文时,参考文献怎么引用?
- 微服务概念及SpringCloud五大神兽介绍
- 【VBA】批量转化表格格式(xls转xlsx、csv转xlsx)
- 如何清除DNS缓存,使用cmd命令清理DNS缓存方法
- UG NX 12 对象的查看操作
- 原码, 反码, 补码 详解
热门文章
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
- LeetCode:Spiral Matrix I II
- IE下的li有空白问题
- rlwrap 让Linux下的sqlplus变得好用
- Iptables架构
- 【Scala-spark.mlib】稠密矩阵和稀疏矩阵的创建及操作
- 使用Vscode进行远程炼丹
- 西门子数控面板图解_20190319工控维修日记(西门子系统第四讲)
- windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档
- vc richedit 指定光标位置_机械图纸·每日一符:位置度