js的数组的一些操作
1 arr.reduce
let xxx = arr.reduce( function (pv, cv, ci ,arr) {
return
}[, init_val] )
对arr的每个元素,执行匿名函数fun,并将返回值作为下一次调用fun的pv。
pv:pre value,上一次执行后返回的值。
cv:current value,当前操作对应的索引对应的值。
ci:current index,当前操作对应的索引。
arr:执行当前操作的数组。
当没有init_val的时候,跳过arr[0],默认从index=1开始执行,arr[0]直接充当pv。
当有init_val的时候,从index=0开始执行,init_val充当pv。
let arr = [1,2,3,4]
let = sum = arr.reduce(function (pr, cv, ci, arr) {
console.log(pr, cv, ci);
return pr + cv;
})
console.log(sum);

直接从2开始的,1直接作pr
let arr = [1,2,3,4]
let = sum = arr.reduce(function (pr, cv, ci, arr) {
console.log(pr, cv, ci);
return pr + cv;
}, 0)
console.log(sum);

从1开始,0作pr,符合前缀和的逻辑
let arr = [1,2,3,4]
let = sum = arr.reduce(function (pr, cv, ci, arr) {
console.log(pr, cv, ci);
return pr + cv;
}, 5)
console.log(sum);

从1开始,相当于初值为5的前缀和
不知道有什么用,反正没有原生的快就完事了。
2 arr.forEach
看完reduce就不得不顺便看一下forEach了
arr.forEach( function (cv, ci, arr) {
}[, thisvalue] )
这个thisvalue参数,我至今不知道可以怎么用。
各个参数含义和reduce一样,其中cv是必须的。
其实就是循环。
3 arr.map
那也就比逊顺便说一下map了
let new_arr = arr.map(function (cv, ci, arr) {
return ;
})
返回值是一个新数组,新数组中的每个值等于对应旧数组当时在匿名函数里的返回值
例如,返回一个数组,是每个值的平方
let new_arr = arr.map(function (cv, ci, arr) {
return cv * cv;
})
console.log(new_arr);

总结一下:
reduce 和 map都需要返回值,reduce返回的是一个值,而其每次的返回值,作为下一次运算的参数pv。
而map返回的是一个数组,新数组的每个值等于匿名函数的return值。
forEach的匿名函数不需要返回值,就是一个简单的循环,不产生新的东西。
但是不能这么写
let arr = [1,2,3,4]
arr.forEach(function (cv, ci, arr) {
cv = cv * cv;
})
console.log(arr);
这个cv只是一个形参,arr的值不会变的。
必须写成
arr[ci] = cv * cv;
4 arr.filter()
这也是一个比较好用的api,字面意思,用于过滤一些元素
let new_arr = arr.filter(function (cv, vi ,arr) {
return true or false;
})
true保留,false删掉。
5 arr.sort()
注*:不能对数字数组直接排序,因为会先化为字符串。用法和c艹的cmp一样,给sort传入一个cmp函数,注意顺序是反的,< 返回true是从大到小。
function cmp (x, y) {
return x > y ? true : false;
}
console.log([10, 20, 1, 2].sort());
console.log([10, 20, 1, 2].sort(cmp));

6.数组去重并排序
let arr = [1,2,3,3,5,6,7,5,3,8,9,23,22,7,23,1];
// let arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; let new_arr = (arr.filter(function (cv, ci, arr) {
return arr.indexOf(cv) === ci;
})).sort((a, b) => {return a > b}); console.log(new_arr);
7.Array.find() 和 findIndex()
arr.find((value, index, arr) => {
return value > 4;
})
arr.findIndex((value, index, arr) => {
return value > 4;
})
find 返回值
findIndex 返回下标
我觉得是不是利用自身的迭代器是不是比for + break快
js的数组的一些操作的更多相关文章
- js对数组对象的操作以及方法的使用
js对数组对象的操作以及方法的使用 如何声明创建一个数组对象: var arr = new Array(); 或者 var arr = []; 如何移除所有数组中数据? arrayJson.dataL ...
- 关于JS中数组的分析操作
JS数组的基础操作代码: <script type="text/javascript"> 数组的三种定义 var arr1 = new Array( ...
- js对数组的常用操作
在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...
- js对象,数组,字符串的操作
循环绑定=>变量污染 for (var i = 0;i<lis.length;i++){ lis[i].index = i;#给页面元素对象添加一个任意属性(保留索引的属性index) # ...
- js对数组的操作函数
js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...
- js中对arry数组的各种操作小结
最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊,为了在以后的工作中写出最优化的代码,我 ...
- js的数组操作
用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...
- js,jQuery数组常用操作小结
一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...
- JS之数组的几个不 low 操作
JS之数组的几个不 low 操作 1.扁平化n维数组 1)终极篇 [1,[2,3]].flat(2) //[1,2,3] [1,[2,3,[4,5]].flat(3) //[1,2,3,4,5] [1 ...
随机推荐
- 使用Aspose.Words将Word文档转换为Tiff格式图片文件
用Aspose组件的优点是操作Word文档不需要安装Office就可以实现. 首先需要引用Aspose.Words.dll,链接地址:链接:https://pan.baidu.com/s/1rJvjp ...
- c# jobject 的数据结构的解析:
c# jobject 数据结构的解析:首先下载Newtonsoft.Json,增加引用using Newtonsoft.Json.Linq;把jobject的内容提取出来,Jobject的内容格式如下 ...
- Arrays工具、二维数组以及LeetCode练习题
1 Arrays PS:Arrays位于java.util包下 int binarySearch(type[] a, type key); 使用二分法查询 key 元素在 a 数组中的索引,如果数组不 ...
- windows系统 docker + swoole 操作
之前文章讲过在windows系统安装 cgywin 从而安装swoole扩展的操作,但是安装cgywin的时候会出现这样那样的问题.所以今天记录下另一种方式使用docker 安装 swoole 环境! ...
- 编程心法 之 怎么选择合适的IDE
一般情况下,使用IDE进行开发可以极大的提高开发效率 最佳选择 如果语言是GNU开源的则Eclipse,因为Eclipse就是开源的 例如C和C++这样的底层语言并且经典的语言,基于GNU的语言,推荐 ...
- px妙转rem
px:像素,相对长度单位,相对于显示器屏幕的分辨率而言(其实我个人认为可以理解为固定单位): rem:这是个web前端中的新成员,是CSS3中新增的一个相对单位.相对的只是html根元素: 1.设定两 ...
- AFO && OI回忆录
技不如人,甘拜下风 今天是2019.4.6,联考第一天,菜鸡attack原题爆炸(其实是都不会)心灰意冷(其实并没有很难过)写下了这篇文章 T1 2h写个跟\(k\)无关的假算法写到最后发现是三个lo ...
- 自定义编译gdal库
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用下载下来的gdal库的makefile来编译gdal库,生成的gdal库的名字debug版本和release版本都 ...
- Spring AOP 整理笔记
一.AOP概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 利用AOP可以对业务逻辑的各 ...
- 西湖论剑2019-msc之奇怪的TTL
msc1给了一串很长的TTL字符,参考一些隐写的文章,猜测是在ttl中藏了信息,题目是这样的 我们截获了一些IP数据报,发现报文头中的TTL值特别可疑,怀疑是通信方嵌入了数据到TTL,我们将这些TTL ...