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. 编程心法 之 怎么选择合适的IDE

    一般情况下,使用IDE进行开发可以极大的提高开发效率 最佳选择 如果语言是GNU开源的则Eclipse,因为Eclipse就是开源的 例如C和C++这样的底层语言并且经典的语言,基于GNU的语言,推荐 ...

  2. Android与js互相调用

    有话要说: 本篇主要总结了简单的Android与js互相调用的方法. 在开发过程中遇到了需要在安卓中调用js方法的需求,于是将具体的实现过程总结成这篇博客. 效果: 其中“调用安卓方法”按钮是html ...

  3. 啰嗦的 java,简洁的 lombok —— lombok 的使用及简单实现单例模式注解

    lombok 是什么? lombok 是一个非常神奇的 java 类库,会利用注解自动生成 java Bean 中烦人的 Getter.Setting,还能自动生成 logger.ToString.H ...

  4. 基于GitLab的Code Review教程

    一.前言 1.本文主要内容 GitLab Code Review机制说明 Git Workflow 与 Git Code Review Workflow GitLab Code Review 配置说明 ...

  5. Github入门详情教程

    前言 之前我写了一篇文章<一篇文章了解Github和Git教程>还延伸了几篇阅读,对大部分小白很有用,那么我继续普及下Github页面及其概念. 定义 GitHub 是一个网站,一个面向开 ...

  6. 西湖论剑2019复现-Web之首家线上赌场上线啦

    首页打开 经过测试发现name和code参数可控,但尝试注入没有发现注入点,于是直接扫描目录找思路 一扫描,果然有问题 目录扫描里面可以看到有一个/.DS_Store的文件,DS_Store是Mac ...

  7. .Net Core 在Linux服务器下部署程序--(3). 部署.net Core程序

    确认第二步中的软件已安装完成 lrzsz文件上传下载软件 zip与unzip压缩包软件 net core 相关软件 确认上述软件安装完成之后,开始部署程序 创建部署文件夹 我的习惯是在usr文件夹下新 ...

  8. LeetCode算法题-Reach a Number(Java实现)

    这是悦乐书的第310次更新,第331篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754).你站在无限数字线的0号位置.在目的地有个target.在 ...

  9. Android高版本联网失败报错:Cleartext HTTP traffic to xxx not permitted解决方法

    前言:为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...

  10. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)

    场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...