今天在网上看到一篇帖子,如题:

出处:前端开发博客 (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详解相关推荐

  1. python多维数组添加元素_numpy中三维数组中加入元素后的位置详解

    今天做数据处理时,遇到了从三维数组中批量加入二维数组的需求.其中三维数组在深度学习的特征数据处理时经常会使用到,所以读者有必要对该小知识点做到清楚了解并掌握.现对三维数组中的元素位置结合代码做详细归纳 ...

  2. js数组中indexOf和findIndex的区别

    1. indexOf 语法 arr.indexOf(searchElement[, fromIndex]) 参数 searchElement  要查找的元素 fromIndex (可选 )  开始查找 ...

  3. JS 数组中的 filter 方法

    1.定义 filter()创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 2.语法 array.filter(function(currentValue,index,arr) ...

  4. 怎样理解js数组中indexOf()的用法与lastIndexOf

    第一首先你运行一下它的js代码: var arr1=["大学","中庸","论语","孟子","诗" ...

  5. 第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 ...

  6. 【OpenCV4】查找图像,数组中最大最小值 cv::minMaxLoc() 使用详解(c++)

    函数原型 1: void cv::minMaxLoc ( InputArray src,double * minVal,double * maxVal = 0,Point * minLoc = 0,P ...

  7. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  8. js中every用法_js数组中的方法 some, every, filter, find,map, reduce讲解及使用场景

    前言 之前对数组的循环来说,我拿到代码就使用forEach循环,主要原因是我对数组的其他方法不是很了解,以及觉得forEach已经可以做到想要的效果,没必要在去使用其他方法,这都是对使用场景不了解导致 ...

  9. JS数组中 forEach() 和 map() 的区别

    JS数组中 forEach() 和 map() 的区别 Array中 Array.forEach()和 Array.map()方法之间的区别. forEach()和map()方法通常用于遍历Array ...

最新文章

  1. 技术图文:如何实现汉诺塔问题?
  2. 代码Overlay机制
  3. 热点事件发现、演化及时间线Timeline、故事线Storyline自动生成
  4. 简单一招搞定公司牛人 转自 潘文富
  5. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战
  6. mac xcode c++ cin cout注意细节一
  7. 多分类问题的另一种处理策略——softmax回归
  8. Linux内存管理 (3)内核内存的布局图
  9. 利用MDTools和Hydraw设计专业的液压阀块
  10. java 拟合曲线_关于java实现自定义曲线拟合的研究
  11. element修改图标的大小
  12. 音频-音频术语名词解释
  13. 汇编语言_使用int16h中断读取键盘缓冲区
  14. xbox360链接pc_如何在Windows PC上使用Xbox One控制器
  15. 写论文时,参考文献怎么引用?
  16. 微服务概念及SpringCloud五大神兽介绍
  17. 【VBA】批量转化表格格式(xls转xlsx、csv转xlsx)
  18. 如何清除DNS缓存,使用cmd命令清理DNS缓存方法
  19. UG NX 12 对象的查看操作
  20. 原码, 反码, 补码 详解

热门文章

  1. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
  2. LeetCode:Spiral Matrix I II
  3. IE下的li有空白问题
  4. rlwrap 让Linux下的sqlplus变得好用
  5. Iptables架构
  6. 【Scala-spark.mlib】稠密矩阵和稀疏矩阵的创建及操作
  7. 使用Vscode进行远程炼丹
  8. 西门子数控面板图解_20190319工控维修日记(西门子系统第四讲)
  9. windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档
  10. vc richedit 指定光标位置_机械图纸·每日一符:位置度