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 arr = [1,2,3,4]
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的数组的一些操作的更多相关文章

  1. js对数组对象的操作以及方法的使用

    js对数组对象的操作以及方法的使用 如何声明创建一个数组对象: var arr = new Array(); 或者 var arr = []; 如何移除所有数组中数据? arrayJson.dataL ...

  2. 关于JS中数组的分析操作

    JS数组的基础操作代码: <script type="text/javascript">        数组的三种定义    var arr1 = new Array( ...

  3. js对数组的常用操作

    在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...

  4. js对象,数组,字符串的操作

    循环绑定=>变量污染 for (var i = 0;i<lis.length;i++){ lis[i].index = i;#给页面元素对象添加一个任意属性(保留索引的属性index) # ...

  5. js对数组的操作函数

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...

  6. js中对arry数组的各种操作小结

    最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊,为了在以后的工作中写出最优化的代码,我 ...

  7. js的数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  8. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  9. 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 ...

随机推荐

  1. K2开发中,遇到用户无权限OPEN当前的待办

    1.用户有的时候在做操作时,提示用户没有权限OPEN当前流程,需要注意判断当前用户是K2标签还是K2SQL标签.如果标签不对,会导致当前问题的发生 后续如果再有碰到,再补充吧

  2. 从零开始学安全(四十六)●sqli-labs 1-4关 涉及的知识点

    Less-1 到Less-4  基础知识注入 我们可以在 http://127.0.0.1/sqllib/Less-1/?id=1 后面直接添加一个 ‘ ,来看一下效果: 从上述错误当中,我们可以看到 ...

  3. CSS3 弹性盒子

    理解: CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式. 设置弹性盒子: 弹性盒子由弹性容器(Fl ...

  4. K60用IRA通过j-link下载失败,解决方法

    K60在用飞思卡尔原厂的例程时,例程编译时没有问题,但是烧写时不成功,出现以下提示,请问该如何解决这个问题?提示1.Miss or malformed flash loader specificati ...

  5. Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)

    首先创建一个新的Android工程,下面是页面布局: Java代码: 我们先来分析一下如何完成的步骤: 1.首先,先完成生成随机数.(包括随机生成几组数字,范围为多少的数字,四则运算符号等): 2.要 ...

  6. findlibrary returned null

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10181330.html 该错误是在加载so库的时候出现的,就是找不到so库. 一.检查jinLibs目录 ...

  7. STL源码剖析-vector

    STL(Standard Template Library) C++标准模板库,acm选手一定对它不陌生,除了算法,那几乎是“吃饭的家伙了”.我们使用库函数非常方便,且非常高效(相对于自己实现来说). ...

  8. 从PM到非洲酋长,得人心者得天下

    说正事之前,先唠10块钱儿的…… 偶然看到房一波的故事,这个PM了不得了! 房兄是山东电建三公司,派驻到尼日利亚建设燃机电站的PM.本来在非洲,这种“万丈高楼平地起”的项目是很好干的,可是房兄却遭遇了 ...

  9. 【SpringBoot笔记】SpringBoot如何正确关闭应用

    关闭Spring Boot应用程序,我们可以通过OS命令kill -9 进程ID 实现将进程杀死.但是,有没有一种更好的方式,比如通过REST请求实现?Spring Boot Actoator提供了实 ...

  10. CG-CTF simple-machine

    运行一下,输入flag: 用ida打开: input_length和input_byte_804B0C0为重命名的变量:现在一个个看调用的函数. sub_8048526(): 这个函数使用了mmap分 ...